【发布时间】:2010-03-27 13:58:57
【问题描述】:
我找到了这两个:
[root@~]# echo $i;
2
[root@~]# echo ${i};
2
【问题讨论】:
-
哎呀,你为什么要以 root 身份玩脚本?
-
@Jefromi:不用担心——Unix 之神会在正确错误的时间给予适当的教训...
我找到了这两个:
[root@~]# echo $i;
2
[root@~]# echo ${i};
2
【问题讨论】:
除了其他人的回答之外,这里还有一些信息。
标量变量可以使用数组语法来引用:
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 parameters 和 parameter expansion 的文档。
【讨论】:
echo ${!var}
echo ${array[$i]}
set -- $var; echo $1 $2
【讨论】:
其实这两种方式是一样的。
不同的是,一个对你想要什么变量非常具体,另一个有点笼统。例如,如果您想打印“2cents”(注意缺少空格),那么扩展您的示例将如下所示:
echo $icents;
这会失败,因为你没有变量“icents”,但是另一个例子:
echo ${i}cents;
将正确打印出“2cents”,因为取消引用“$”应用于显式变量“i”,大括号充当变量名称开始和停止的指示符。
这需要额外的输入,但大多数情况下,总是在变量名周围包含花括号会更好。
【讨论】:
正如其他人已经开始描述的那样,有几种不同的方法可以在 bash 中获取变量值。对于简单的变量,如果您想要的只是完整的、未修改的值,以尽可能安全的方式获得,请使用“${i}”语法。
【讨论】: