为什么我在shell脚本中使用双引号

3 linux bash shell scripting

我理解使用单引号和双引号.

但我不知道情况需要在脚本中加双引号.

这些陈述没有差异

$ echo hello world! $1
$ echo "hello world! $1"
Run Code Online (Sandbox Code Playgroud)

请告诉我正常和双引号之间的差异.

Joh*_*024 5

让我们考虑一下这些文件的目录:

$ ls foo*
foo111.txt  foo11.txt  foo1.txt
Run Code Online (Sandbox Code Playgroud)

让我们考虑一下脚本的一个小变化:

$ cat script
#!/bin/sh
echo No quotes $1
echo "Double quotes $1"
Run Code Online (Sandbox Code Playgroud)

现在,让我们运行它:

$ bash script "foo*"
No quotes foo111.txt foo11.txt foo1.txt
Double quotes foo*
Run Code Online (Sandbox Code Playgroud)

如您所见,结果完全不同.如果没有双引号,则执行路径名扩展.

为了说明另一个区别:

$ bash script "long              space"
No quotes long space
Double quotes long              space
Run Code Online (Sandbox Code Playgroud)

使用双引号,保留单词之间的长空格.没有它,所有连续的空格都被替换为一个空格.这是分词的一个例子.