我正在学习Bash,我看到了表格
C =示例
回声“$ C”
给出相同的表格结果
C =“example”
echo $ C
我想知道是否更好地将“”放在变量的赋值中或者在$之后。或者如果它无动于衷。或者如果一个人认为比另一个更“漂亮”。
答案 0 :(得分:5)
如果您确定变量的值是单个单词(无空格),则可以使用$varname
或${varname}
。如果您无法保证这一点,那么您应该使用"$varname"
或"${varname}"
。请注意,bash在解释命令之前会进行分词,因此如果不引用表达式,实际上可能会出现语法错误,例如
C="white space"
if [ -z $C ]
then
...
fi
会导致语法错误:
-bash: [: white: binary operator expected
虽然这很好用:
C="white space"
if [ -z "$C" ]
then
...
fi
这是因为在第一个未加引用的情况下变量扩展之后bash看到了这个:
if [ -z white space ]
then
...
fi
并且-z
运算符只需要一个,而不是两个参数。在第二个,引用案例bash看到这个:
if [ -z "white space" ]
then
...
fi
即。根据需要只需一个参数。另请注意,引号用于分配
C="white space"
因为如果你写了
,它也会产生错误C=white space
因为这意味着:执行命令space
,环境包含添加的变量C=white
。
因此,一般来说,您应引用这些表达式,以确保您的代码对不可预见的变量值更具鲁棒性。如果变量值来自输入,文件等,则尤其如此。通常可以放弃整数变量的引号,或者只想在echo $C
中显示变量的值。
答案 1 :(得分:4)
字符串包含空格字符时很重要。如果没有引号,空格字符将被视为标记分隔符,而bash会尝试将替换字符串解释为表达式。
当您不打算将变量作为表达式的一部分进行求值时,始终将引号置于安全状态。
想象一下,您将输入从“示例”更改为“两个单词”,然后在执行脚本时可能会遇到奇怪的行为甚至语法错误,以防您忽略了上述内容。
换句话说,
C="abc def"
# the echo command receives one argument: "abc def"
echo "$C"
# echo receives two arguments: "abc" and "def"
echo $C
# bash tries to execute the program "abc" with a first argument "def"
$C
# bash tries to execute the program "abc def"
"$C"
答案 2 :(得分:2)
关于引号和分词的好文档:
“使用更多报价!”它们至关重要。另外,了解'
和"
和`之间的区别。请参阅http://mywiki.wooledge.org/Quotes和http://wiki.bash-hackers.org/syntax/words
来自IRC freenode #bash的greybot样本正在与世界交谈=)
答案 3 :(得分:1)
如果它是单字常量,则无关紧要。
但是,您应该阅读有关这两种引用的内容。试试this article和此documentation。还有SO question。
答案 4 :(得分:0)
尝试使用空格的真实示例。对于字符串example
,您根本不需要任何引用。因此,创建一个名为This is an example.txt
的文件,然后重试。将echo
替换为ls
...