使用双引号而不是......时有什么区别?

den*_*hoe 2 bash

我的代码相当简单,只是输出彼此不同.而且,我想知道为什么结果显示如下..

#!/bin/bash

fileList=`ls`  
echo $fileList   # without doubleQuote
Run Code Online (Sandbox Code Playgroud)

输出:

f1 f2 f3
Run Code Online (Sandbox Code Playgroud)

#!/bin/bash

fileList=`ls` 
echo "$fileList" # with doubleQuote
Run Code Online (Sandbox Code Playgroud)

输出:

f1 
f2
f3
Run Code Online (Sandbox Code Playgroud)

rua*_*akh 5

区别在于双引号禁用了单词拆分.例如,如果变量foo包含a b c,"$foo"则为单个参数(等效于'a b c'),而$foo将其拆分为三个参数(等效'a' 'b' 'c'或简单a b c).

在你的例子中,fileList包含新行,双引号保留,而echo $fileList意味着echo f1 f2 f3- 所以它只是在它们之间打印空格,这就是echo当你给它多个参数时的情况.

另一个差异,不适用于您的示例,但通常很重要,是双引号禁用文件名扩展.例如,如果变量foo包含a*,echo "$foo"则将打印a*,而echo $foo将打印当前目录中以所有文件开头的所有文件的名称a.

你应该几乎总是把你的变量扩展放在双引号中; 如果不这样做,可能会出现太多问题.