我studyng击,而我看到的形式哪种形式更适合在Bash中使用?
C=example
echo "$C"
给予形式相同的结果
C="example"
echo $C
我想知道,如果是最好把“”在中赋值的变量或$之后。或者如果它无动于衷。或者如果有人认为“比其他人更漂亮”。
我studyng击,而我看到的形式哪种形式更适合在Bash中使用?
C=example
echo "$C"
给予形式相同的结果
C="example"
echo $C
我想知道,如果是最好把“”在中赋值的变量或$之后。或者如果它无动于衷。或者如果有人认为“比其他人更漂亮”。
如果您确定某个变量的值是单个单词(没有空格),那么可以使用$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
产生一个错误,因为这将意味着:执行与含有添加变量C=white
环境命令space
。
因此,一般而言,您应该引用这些表达式以确保您的代码对不可预见的变量值更健壮。如果变量值来自输入,文件等,则尤其如此。通常可以放弃整数变量的引号,或者当您只想显示变量的值时,如echo $C
。
如果它是一个单词的常量,则无关紧要。
但是,您应该阅读关于这两种引用。试试this article和这个documentation。还有一个SO question。
当字符串包含空格字符时,它很重要。如果没有引号,空格字符将被视为令牌分隔符,并且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"
尝试用空格一个真实的例子。字符串example
根本不需要任何引用。因此,创建一个名为This is an example.txt
,然后重试文件。替代品echo
和ls
...
是的。如果我使用我发布的第一个表单,我有一个错误。在第二种方式中,他似乎认识到空白。感谢您的实际解释。 – Kyrol
我建议无处不在。特别是使用变量时。 –
约引号和文字劈裂一个很好的文档:“使用更多行情”
他们至关重要。另外,了解'
和"
和`之间的区别。请参阅从IRC freenode的#bash http://mywiki.wooledge.org/Quotes和http://wiki.bash-hackers.org/syntax/words
greybot样品是否正在与世界=)
我觉得最好的做法是使用报价无处不在!有时是不需要的,但imho它更具可读性。 – uzsolt
是的,我看到“”和“”的区别。 – Kyrol
感谢您的文章! – Kyrol
«引用的基础很简单,当值包含空格时使用单引号或双引号。 » – Kyrol