【问题标题】:How can you assign the positional parameters passed into a variable within the script in bash?如何在 bash 脚本中分配传递给变量的位置参数?
【发布时间】:2010-12-05 03:54:51
【问题描述】:

在我们的类脚本分配中,我们需要传递任意数量的目录作为位置参数,我们的脚本(最终)将计算、显示并保存到文件中作为参数传递的目录的某些信息。反过来,我们需要对我们希望将结果保存到的文件的名称进行几次测试。

我的问题无疑是一个简单的问题,我想知道如何获取存储在 $@ 中的信息并将其传递给一个变量,然后我可以将其用于我需要做的所有测试。

【问题讨论】:

    标签: bash shell


    【解决方案1】:

    您可以使用for 循环来遍历$@ 数组:

    for arg in "$@"
    do
       # use $arg
    done     
    

    【讨论】:

    • @mrweinerdog:我给 codaddict +1,因为他是唯一一个引用 $@ 的人,这将保护包含分词字符(通常是空格、制表符和换行符)的引用参数。
    • 如果你想保存几个击键,可以省略in "$@"
    【解决方案2】:

    $@ 一个变量。 $_ 和 $1、$2、...也是如此

    听起来你想做的事情可以通过使用“shift”和循环(“for”或“while”)来实现。或者,只需使用:

    for i in $@; do ...; done

    供您参考:

    shift: shift [n] The positional parameters from $N+1 ... are renamed to $1 ... If N is not given, it is assumed to be 1.

    【讨论】:

      【解决方案3】:
      for i in $@; do echo $i; done
      

      您可以将 echo $i 替换为您想要对每个参数执行的操作。

      【讨论】:

        【解决方案4】:

        您还可以像数组一样引用$@ 中的参数。它是一个,但你不能使用数组下标。但是,您可以使用数组切片:

        echo ${@:3:1}    # $@ is ONE-based
        

        echo第三个参数。

        echo ${@:4:3}
        

        echo第四个、第五个和第六个参数。

        顺便说一句,$@ 的“下标”是$1$2 ... $#。最后一个,$#,是参数数量的计数。 $0 有一个特殊的作用。它包含脚本的名称和路径。

        您还可以将整个内容(甚至部分内容)分配给可以使用下标的数组。

        some_array=("$@")
        echo ${some_array[3]}      # the fourth element (ZERO based)
        echo ${some_array[3]:4:3}  # 5th, 6th and 7th chars of the fourth element
        echo ${some_array[@]:4:3}  # 5th, 6th and 7th ELEMENTS
        echo ${some_array[@]: -1}  # the last element (notice the space)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-11-14
          • 2011-05-24
          • 2020-05-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-05-20
          • 2013-09-05
          相关资源
          最近更新 更多