我是否应该在shell脚本中用引号括住变量?

例如,以下各项是否正确:

xdg-open $URL
[ $? -eq 2 ]

xdg-open "$URL"
[ "$?" -eq "2" ]

如果是,为什么?

推荐答案

一般规则:如果它可以是空的或包含空格(或任何真正的空格)或特殊字符(通配符),则引用它.不引用带空格的字符串通常会导致shell将单个参数分解为多个参数.

$?不需要引号,因为它是一个数值.$URL是否需要它取决于你在里面允许什么,如果它是空的,你是否还想要一个参数.

出于习惯,我总是引用字符串,因为这样更安全.

Linux相关问答推荐

与mmap和munmap相比,保留一个巨大内存文件(约400 MB)的mmap多次的性能成本

在c++编译期间,什么是linux命令,它给出了链接库的路径?

Git在某些文件中添加回车符,尽管autocrlf已关闭

为什么组合的查找和重命名命令在 bash shell 下不能按预期工作?

删除一行和它之前的一行

Stripping linux 共享库

如何在 Linux 命令行上解析 CSV 文件?

使用 awk 或 sed 删除特定字符

BASEDIR 环境变量未正确定义

如何使用完整路径或文件名显示 grep 结果

Java 8 上的 SQL Server JDBC 错误:驱动程序无法使用安全套接字层 (SSL) 加密建立与 SQL Server 的安全连接

Bash 命令 :(){ :|:& };: 将产生进程导致内核死亡.你能解释一下语法吗?

用于 Linux 的 Less 编译器

如何知道是否有足够的内存可以在 Linux 机器上部署新应用程序?

在 linux 上查看文件大小

为什么`du`的输出通常与`du -b`如此不同

是否有一个 linux 命令来确定与给定进程 ID 关联的窗口 ID?

如何运行我所有的 PHPUnit 测试?

使用 SED 将单词的首字母大写

如何限制堆大小?