シェルスクリプトを実行すると、sh -c が正しい出力を取得できません。

シェルスクリプトを実行すると、sh -c が正しい出力を取得できません。

シェルの配列からデータを取得するために繰り返し、
次の内容を含むシェルファイルからデータを実行すると機能します。

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

おすすめ記事