forループでパラメータ値を使用する方法

forループでパラメータ値を使用する方法

スクリプトを実行しています。script.sh 12345 12346 12347

for z in 1..$(seq 1 $#);
do
    echo "param $z is $($(echo $z))"; //Line 4
done;

出力は次のようになると予想されます。

param 1 is 12345
param 2 is 12346
param 3 is 12347

4行目で何か抜けたようです。

ベストアンサー1

問題は、$($(echo $z))まず$(1)(if $z1)に展開し、シェルが1それをコマンドとして実行しようとしていることです。


仮定bash:

params=( "$@" )

for (( i = 0; i < ${#params[@]}; ++i )); do
    printf 'Param %d is "%s"\n' "$i" "${params[i]}"
done

実行してください:

$ bash script.sh a b c
Param 0 is "a"
Param 1 is "b"
Param 2 is "c"

または以下を使用して/bin/sh

i=0
while [ "$#" -gt 0 ]; do
    printf 'Param %d is "%s"\n' "$i" "$1"
    i=$(( i + 1 ))
    shift
done

走る:

$ /bin/sh script.sh a b c
Param 0 is "a"
Param 1 is "b"
Param 2 is "c"

明示的に列挙する必要がある場合がそうです。一般的に我々は繰り返します"$@"

for param in "$@"; do
    printf 'Param: "%s"\n' "$param"
    # do other thing with "$param" here
done

おすすめ記事