を配列要素異なる振る舞いを追加し、私は次のコードを持っている:私はコピー/貼り付けを経由してシェルで対話的にそれをこれを実行すると、その後、私は私が欲しいの出力をバッシュ:対話型シェル対スクリプトから
numbers=()
a=()
a+=('foo bar baz')
for ((x=0; x<=9; x++));
do
numbers+=($x)
done
echo $numbers
echo $a
を取得します、である:私はスクリプトとして実行するとき
➜ echo $numbers
0 1 2 3 4 5 6 7 8 9
➜ echo $a
foo bar baz
しかし、私が取得:
0
foo bar baz
なぜ?そして、対話型シェルを使ってどのように動作させることができますか?
完全開示:私は広範囲にグーグルで見つけられませんでした。私はzshを実行し、この場合はbashと同じと仮定します。私はbashと対話シェルとファイルの違いに慣れていません。
編集は有用なコメントの後、私は今、奇妙な犯人を見つけました。 chmod +x
とは関係があると思います。
私はシンプルなスクリプトを作成します。bashの実行ファイルとしてchmod +x
セットにそれをすることを
chmod +x ./test
➜ magic ./test
0
/bin/zsh
➜ magic zsh ./test
0 1 2 3 4 5 6 7 8 9
/bin/zsh
それができる:これは、出力は(私はmagic
というフォルダにいる)である
for ((x=0; x<=9; x+=1)) do numbers+=($x); done; echo $numbers;
echo $SHELL
を?
私はまだ異なる観察された振る舞いがあるのかまだわかりませんが、この回答は私の特定の問題を解決するのに役立ちました:http://unix.stackexchange.com/questions/211395/in-a-loop-over-an- array-add-an-element-to-the-array - 私はまだ相違がある理由について興味があります。 –
zshの違いを再現することはできません。 ZSHは、シェルスクリプト内で、またはfor((x = 0; x <= 9; x + = 1))のdo + =($ x);完了しました。 echo $ numbers; 'bashはこの1ビットを気に入らず、' echo $ {numbers [@]} 'で配列を出力させます。おそらくあなたの端末はbashですが、あなたはzshでスクリプトを実行していますか? 'echo $ SHELL'を試して、何がポップアップしているのを見てください。 – JNevill
私は 'csh'、' ksh'、 'fish'でもそのループを試しました。 'csh'と' fish'には構文エラーがあり、 'ksh'は' bash'のように動作していたので、あなたのユーザのデフォルトシェルはその2つのうちの1つです。 – JNevill