【问题标题】:Using $# in bash loops在 bash 循环中使用 $#
【发布时间】:2013-09-24 20:23:51
【问题描述】:

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

#!/bin/bash

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

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

{1..3}

【问题讨论】:

    标签: bash shell sh


    【解决方案1】:

    表达式{} 不接受变量。

    为此,您需要使用例如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) and command查看更多信息。

    测试

    $ ./a
    $
    
    $ ./a a b c
    1
    2
    3
    

    【讨论】:

    • 谢谢。你能解释一下美元符号在这种情况下的作用吗?我将美元符号理解为引用变量的前缀,但在括号中看不到任何赋值。
    • 谢谢。所以 seq 实际上是一个可执行文件而不是一个语言结构。很有道理。
    • 没错!你解释得比我好 :) 参见例如 $ which seq 返回类似 /usr/bin/seq 的内容。
    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-15
      • 2020-10-20
      • 2019-11-22
      • 1970-01-01
      • 1970-01-01
      • 2016-02-06
      • 2013-12-20
      • 2021-05-31
      相关资源
      最近更新 更多