シェルの配列からデータを取得するために繰り返し、
次の内容を含むシェルファイルからデータを実行すると機能します。
arr=(1 2 3 4 5)
for var in ${arr[@]};
do
echo $var
done
sh -c
しかし、以下のように使用すると出力はありません。
sh -c "arr=(1 2 3 4 5);for var in ${arr[@]};do echo $var;done"
ベストアンサー1
問題はを使用していますsh -c "..."
。ご覧ください。@gilsの答え詳細については。
さらに進むsh
(参照POSIX sh)は配列をサポートしません(厳密に言えば、配列は1つだけなので、$@)、サポートされているシステムの他のシェルまたは別の配列を呼び出すbash
必要zsh
がありますksh
。
bash -c 'arr=(1 2 3 4 5);for var in "${arr[@]}";do echo "$var"; done'
${arr[@]}
また、逆参照時にミスをしたことに注意してください。実際にfor var in "${arr[@]}"
これを変更する必要があります。引用符のない変数で分割+globを呼び出すことは、多くのセキュリティ脆弱性の原因です。。
POSIX shを使用するには、次のものを使用できます。$@:
set -- 1 2 3 4 5
for var do
printf '%s\n' "$var"
done