![在 shell 脚本中使用带参数的引号和不使用引号有什么区别](https://linux22.com/image/190267/%E5%9C%A8%20shell%20%E8%84%9A%E6%9C%AC%E4%B8%AD%E4%BD%BF%E7%94%A8%E5%B8%A6%E5%8F%82%E6%95%B0%E7%9A%84%E5%BC%95%E5%8F%B7%E5%92%8C%E4%B8%8D%E4%BD%BF%E7%94%A8%E5%BC%95%E5%8F%B7%E6%9C%89%E4%BB%80%E4%B9%88%E5%8C%BA%E5%88%AB.png)
我正在看书Linux 命令行在第 27 节中,它教我如何编写 shell 脚本,在文件表达式部分,它说:
该脚本评估分配给常量 FILE 的文件,并在执行评估时显示其结果。关于这个脚本,有两件有趣的事情需要注意。首先,请注意参数 $FILE 在表达式中是如何引用的。这不是必需的,但可以防止参数为空。如果 $FILE 的参数扩展导致空值,则会导致错误(运算符将被解释为非空字符串而不是运算符)。
我不明白“运算符将被解释为非空字符串而不是运算符”,有人能给我举个例子吗?谢谢。
原来的代码是:
#!/bin/bash
# test-file: Evaluate the status of a file
FILE=~/.bashrc
if [ -e "$FILE" ]; then
if [ -f "$FILE" ]; then
echo "$FILE is a regular file."
fi
if [ -d "$FILE" ]; then
echo "$FILE is a directory."
fi
if [ -r "$FILE" ]; then
echo "$FILE is readable."
fi
if [ -w "$FILE" ]; then
echo "$FILE is writable."
fi
if [ -x "$FILE" ]; then
echo "$FILE is executable/searchable."
fi
else
echo "$FILE does not exist"
exit 1
fi
exit
答案1
如果 的值$FILE
是空字符串并且您不引用 则$FILE
您的内容if [ -e $FILE ]; then
将变为if [ -e ]; then
。该命令的规则是,如果和[
之间只有一个值,则如果该值不是空字符串则为 true,如果为空字符串则为 false(因此将采用)。[
]
if [ "" ]; then
else
通过引用,则if [ -e "$FILE" ]; then
变为if [ -e "" ]; then
.[
和 之间有 2 个值]
,因此适用不同的规则。