如何在 for 循环中访问位置参数

如何在 for 循环中访问位置参数

我的 shell 脚本包含一个循环。该脚本通过、、等for使用位置参数。但是,尝试使用类似下面的方法从循环访问这些参数:$1$2$3for

for i in "$@"; do 
echo "$1"
done

... 选择第一个扩展值。例如,当通过 glob ( ) 提供文件列表时./script.sh *.mp4,在循环的每次迭代中,for的值$1将是 glob 扩展为的第一个文件。

同样的情况似乎也适用于:

for i in "$@"; do 
echo "$i"
done

是否可以在for循环中使用位置参数?如果可以,如何使用?

答案1

您的第二个代码片段工作得很好:

# set some positional parameters
set -- foo bar baz

# iterate
for item in "$@"; do
  echo "=> $item"
done

结果

=> foo
=> bar
=> baz

如果你想迭代索引,你需要一个算术 for 循环,以及间接扩展:

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

输出

1 => foo
2 => bar
3 => baz

参考:3.2.5.1 循环结构3.5.3 Shell参数扩展

相关内容