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