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

标签 linux bash shell scripting

<分区>

我明白单引号和双引号的用法。

但我不知道脚本中需要双引号的情况。

声明没有差异

$ echo hello world! $1
$ echo "hello world! $1"

请告诉我普通引号和双引号之间的区别。

最佳答案

让我们考虑一个包含这些文件的目录:

$ ls foo*
foo111.txt  foo11.txt  foo1.txt

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

$ cat script
#!/bin/sh
echo No quotes $1
echo "Double quotes $1"

现在,让我们运行它:

$ bash script "foo*"
No quotes foo111.txt foo11.txt foo1.txt
Double quotes foo*

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

为了说明另一个区别:

$ bash script "long              space"
No quotes long space
Double quotes long              space

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

关于linux - 为什么我在 shell 脚本中使用双引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38757649/

相关文章:

linux - 使用curl命令时需要身份验证错误

scripting - 用于调用另一个命令的 $@ 的 Powershell 类似物是什么?

linux - 在 udev 中替换 hal-get-property 和 hal-find-by-capability?

linux - 使用 OpenSSL 创建证书颁发机构

bash - 在 Bash 中将 clear 绑定(bind)到 ^l

linux - 如何在 rsh 中获取远程脚本并远程分配变量?

linux - Zip -x 的行为不符合预期

python - 读取环境/shell 变量

bash - 有没有办法将 `script` 与 shell 函数一起使用? (彩色输出)

linux - dbus-send 在 shell 脚本中不工作