我正在运行我的脚本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 行中遗漏了一些东西。
我正在运行我的脚本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 行中遗漏了一些东西。
问题
$($(echo $z))
在于它首先扩展为$(1)
(如果$z
为 1),然后 shell 尝试1
作为命令运行。假设
bash
:运行它:
或者,使用
/bin/sh
:运行:
那是如果你真的需要明确列举它们。通常一个人会循环过去
"$@"
:对于三个参数,这将扩展为
1..1
, 。已经将数字打印为不同的单词,并且不能真正生成数字列表。大括号扩展可以生成数字列表,语法为,但在 Bash 中它不支持其中的变量。2
3
seq
for
{1..3}
所以这可以写成
或在 ksh 或 zsh 中使用大括号:
如果你想间接引用一个变量,你可以使用
${!var}
(在 Bash 中)其中var
保存变量的名称,例如或者,您可以使用切片符号
$@
(应该在 Bash/ksh/zsh 中工作):但实际上,仅使用
for x in "$@"
循环值可能被认为更惯用。添加编号也相当简单,无需任何特定于 shell 的功能: