在 shell 脚本中使用带参数的引号和不使用引号有什么区别

在 shell 脚本中使用带参数的引号和不使用引号有什么区别

我正在看书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 [ "" ]; thenelse

通过引用,则if [ -e "$FILE" ]; then变为if [ -e "" ]; then.[和 之间有 2 个值],因此适用不同的规则。

相关内容