我的代码相当简单,只是输出彼此不同.而且,我想知道为什么结果显示如下..
#!/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)
区别在于双引号禁用了单词拆分.例如,如果变量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.
你应该几乎总是把你的变量扩展放在双引号中; 如果不这样做,可能会出现太多问题.
| 归档时间: |
|
| 查看次数: |
46 次 |
| 最近记录: |