2011-11-27 47 views
3

我studyng击,而我看到的形式哪种形式更适合在Bash中使用?

C=example

echo "$C"

给予形式相同的结果

C="example"

echo $C

我想知道,如果是最好把“”在中赋值的变量或$之后。或者如果它无动于衷。或者如果有人认为“比其他人更漂亮”。

回答

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 

产生一个错误,因为这将意味着:执行与含有添加变量C=white环境命令space

因此,一般而言,您应该引用这些表达式以确保您的代码对不可预见的变量值更健壮。如果变量值来自输入,文件等,则尤其如此。通常可以放弃整数变量的引号,或者当您只想显示变量的值时,如echo $C

1

如果它是一个单词的常量,则无关紧要。

但是,您应该阅读关于这两种引用。试试this article和这个documentation。还有一个SO question

+0

是的,我看到“”和“”的区别。 – Kyrol

+0

感谢您的文章! – Kyrol

+0

«引用的基础很简单,当值包含空格时使用单引号或双引号。 » – Kyrol

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" 
0

尝试用空格一个真实的例子。字符串example根本不需要任何引用。因此,创建一个名为This is an example.txt,然后重试文件。替代品echols ...

+0

是的。如果我使用我发布的第一个表单,我有一个错误。在第二种方式中,他似乎认识到空白。感谢您的实际解释。 – Kyrol

+0

我建议无处不在。特别是使用变量时。 –

2

约引号和文字劈裂一个很好的文档:“使用更多行情”

他们至关重要。另外,了解'"和`之间的区别。请参阅从IRC freenode的#bash http://mywiki.wooledge.org/Quoteshttp://wiki.bash-hackers.org/syntax/words

greybot样品是否正在与世界=)

+0

我觉得最好的做法是使用报价无处不在!有时是不需要的,但imho它更具可读性。 – uzsolt

相关问题