Bashでコマンドライン引数を繰り返す

Bashでコマンドライン引数を繰り返す

誰かがこれら2つのコードブロックの違いを説明できますか?私はブロック#2がブロック#1と同じ出力を出力すると思いましたが、そうではありません。誰かが理由を説明できますか?

# ./arguments.sh hello my name is X

ブロック#1

for i
do
    echo $i
done

出力:

hello
my
name
is
X

ブロック#2

args=$#
for (( i=1; i<=$args; i+=1 ))
do
    echo $i
done

出力:

1
2
3
4
5

ベストアンサー1

最初のブロックは(暗黙的に)コマンドライン引数を繰り返します。"$@"

for i in "$@"    # same as your "for i"
do
    echo "$i"
done

2番目のブロックは明示的に引数の数を繰り返し、インデックスを印刷します。

args=$#                          # number of command line args
for (( i=1; i<=$args; i+=1 ))    # loop from 1 to N (where N is number of args)
do
    echo $i
done

$#あなたの例に基づいて5と仮定すると、変数は、、、、、$i値を使用します。12345

他の(現在削除された)回答で指摘したように、次のようにインデックスごとにコマンドライン引数を参照できます。

args=$#
for (( i=1; i<=$args; i++ ))
do
    echo "$i - ${!i}"
done

おすすめ記事