【问题标题】:How many different ways are there to get variable value in bash?在 bash 中获取变量值有多少种不同的方法?
【发布时间】:2010-03-27 13:58:57
【问题描述】:

我找到了这两个:

[root@~]# echo $i;
2
[root@~]# echo ${i};
2

【问题讨论】:

  • 哎呀,你为什么要以 root 身份玩脚本?
  • @Jefromi:不用担心——Unix 之神会在正确错误的时间给予适当的教训...

标签: bash syntax


【解决方案1】:

除了其他人的回答之外,这里还有一些信息。

标量变量可以使用数组语法来引用:

name="dennis williamson"    # scalar
# These all work the same when there's only one element
echo ${name[@]}
echo ${name[*]}
echo ${name[0]}

您可以通过多种方式显示变量的内容和其他信息:

echo "$var"
printf "$var\n"
declare -p var

列出所有以给定前缀开头的变量名:

echo ${!va*}
echo ${!va@}

这里和上面的*@影响双引号时结果是否扩展为单独的单词。

$ array=(red green blue)
$ for color in "${array[@]}"; do echo $color; done
red
green
blue
$ for color in "${array[*]}"; do echo $color; done
red green blue

如果没有双引号,它们都会在单独的行上打印颜色,就像在带有 @ 的版本中一样。

如果将变量导出到环境中,您可以执行以下操作之一:

export | grep var
declare -x | grep var
set | grep var
env | grep var

您可以打印函数内所有局部变量的列表:

local

另外,请参阅 this SO question 了解算术表达式以及有关 shell parametersparameter expansion 的文档。

【讨论】:

    【解决方案2】:
    echo ${!var}
    
    echo ${array[$i]}
    
    set -- $var; echo $1 $2
    

    【讨论】:

      【解决方案3】:

      其实这两种方式是一样的。

      不同的是,一个对你想要什么变量非常具体,另一个有点笼统。例如,如果您想打印“2cents”(注意缺少空格),那么扩展您的示例将如下所示:

      echo $icents;
      

      这会失败,因为你没有变量“icents”,但是另一个例子:

      echo ${i}cents;
      

      将正确打印出“2cents”,因为取消引用“$”应用于显式变量“i”,大括号充当变量名称开始和停止的指示符。

      这需要额外的输入,但大多数情况下,总是在变量名周围包含花括号会更好。

      【讨论】:

      • 我认为“总是使用花括号”有点风格化——在很多情况下,很明显它们是不需要的。如果你坚持有这样的规则,一个不那么令人沮丧的规则是“如果变量名后除了空格或引号之外还有其他内容,请始终使用大括号”
      • 同意。它在很大程度上是一种风格调用,除了它是实际上可以防止大量错误潜入您的程序的那些风格调用之一。因此,就样式调用而言,这比争论缩进或应该换行要好一些。
      【解决方案4】:

      正如其他人已经开始描述的那样,有几种不同的方法可以在 bash 中获取变量值。对于简单的变量,如果您想要的只是完整的、未修改的值,以尽可能安全的方式获得,请使用“${i}”语法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-11-12
        • 1970-01-01
        • 2021-10-08
        • 1970-01-01
        • 2020-05-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多