| 1 | 
  
    ## compare_shells: bash mksh zsh
   | 
  | 2 | 
  
    
   | 
  | 3 | 
  
    # Common between bash/zsh
   | 
  | 4 | 
  
    
   | 
  | 5 | 
  
    
   | 
  | 6 | 
  
    a=(1 '2 3')
   | 
  | 7 | 
  
    argv.py "${a[@]}" "${a[*]}"
   | 
  | 8 | 
  
    ## stdout: ['1', '2 3', '1 2 3']
   | 
  | 9 | 
  
    
   | 
  | 10 | 
  
    
   | 
  | 11 | 
  
    a=(1 '2 3')
   | 
  | 12 | 
  
    argv.py ${a[@]} ${a[*]}
   | 
  | 13 | 
  
    ## STDOUT:
   | 
  | 14 | 
  
    ['1', '2', '3', '1', '2', '3']
   | 
  | 15 | 
  
    ## END
   | 
  | 16 | 
  
    ## BUG zsh STDOUT:
   | 
  | 17 | 
  
    ['1', '2 3', '1', '2 3']
   | 
  | 18 | 
  
    ## END
   | 
  | 19 | 
  
    
   | 
  | 20 | 
  
    
   | 
  | 21 | 
  
    argv.py 1 "${a[@]}" 2 ${a[@]} 3 "${a[*]}" 4 ${a[*]} 5
   | 
  | 22 | 
  
    ## STDOUT:
   | 
  | 23 | 
  
    ['1', '2', '3', '', '4', '5']
   | 
  | 24 | 
  
    ## END
   | 
  | 25 | 
  
    
   | 
  | 26 | 
  
    ## BUG zsh STDOUT:
   | 
  | 27 | 
  
    ['1', '', '2', '3', '', '4', '5']
   | 
  | 28 | 
  
    ## END
   | 
  | 29 | 
  
    
   | 
  | 30 | 
  
    
   | 
  | 31 | 
  
    empty=()
   | 
  | 32 | 
  
    argv.py "${empty[@]}"
   | 
  | 33 | 
  
    ## STDOUT:
   | 
  | 34 | 
  
    []
   | 
  | 35 | 
  
    ## END
   | 
  | 36 | 
  
    
   | 
  | 37 | 
  
    
   | 
  | 38 | 
  
    empty=()
   | 
  | 39 | 
  
    argv.py ${empty[@]:-not one} "${empty[@]:-not one}"
   | 
  | 40 | 
  
    ## STDOUT:
   | 
  | 41 | 
  
    ['not', 'one', 'not one']
   | 
  | 42 | 
  
    ## END
   | 
  | 43 | 
  
    ## BUG zsh STDOUT:
   | 
  | 44 | 
  
    ['not one', 'not one']
   | 
  | 45 | 
  
    ## END
   |