スクリプトを実行しています。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 $z
1)に展開し、シェルが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