0

我试图理解为什么这个循环不会为提供给脚本的每个参数打印一个数字。

#!/bin/bash

for i in {1..$#}; do
  echo $i
done

相反,当提供例如 3 个参数时,它会输出

{1..3}
4

2 回答 2

3

该表达式{}不接受变量。

为此,您需要使用例如seq. 以下将使它::

#!/bin/bash

for i in $(seq 1 $#); do
  echo $i
done

注意$()相当于``。也就是说,它执行命令替换。例如:

$ d=$(echo "hello")
$ echo $d
hello

您可以在Shell Programming: What's the difference between $(command) andcommand中查看更多信息。

测试

$ ./a
$

$ ./a a b c
1
2
3
于 2013-09-24T10:57:48.663 回答
1

大括号扩展发生变量扩展之前

http://www.gnu.org/software/bash/manual/bashref.html#Shell-Expansions

于 2013-09-24T12:23:51.110 回答