Bash 这个if条件是否等同于测试变量的存在性?

Bash 这个if条件是否等同于测试变量的存在性?,bash,Bash,我正在我的Mac电脑上翻找一些系统文件。在/etc/profile中,我找到了以下摘录: if [ "${BASH-no}" != "no" ]; then [ -r /etc/bashrc ] && . /etc/bashrc fi 我尝试了echo“${x-no}”来选择x的各种选项,似乎只要x存在(即已设置),它就会打印x的值,反之亦然 这让我想知道:这个条件是否只是测试变量x是否已设置 进一步的问题:-到底做什

我正在我的Mac电脑上翻找一些系统文件。在
/etc/profile
中,我找到了以下摘录:

 if [ "${BASH-no}" != "no" ]; then
        [ -r /etc/bashrc ] && . /etc/bashrc
 fi
我尝试了
echo“${x-no}”
来选择
x
的各种选项,似乎只要
x
存在(即已设置),它就会打印
x
的值,反之亦然

这让我想知道:这个条件是否只是测试变量
x
是否已设置

进一步的问题:
-
到底做什么?是否有更好的方法来测试变量是否已设置

这个条件是否只是测试变量x是否已设置

是的,尽管在一个不太可能的事件中,
BASH=no
会让人困惑

你到底做什么

下面是《曼巴什》(ManBash)的

[…]省略冒号只会导致对未设置的参数进行测试。
${参数:-word}
使用默认值。如果参数未设置或为空(见上文),
单词的扩展被替换了。否则
参数的值被替换。
是否有更好的方法来测试变量是否已设置

是:
[-v BASH]
。但是,这是特定于bash的,因此无法在执行特定于bash的操作之前检查当前shell是否为bash

这个条件是否只是测试变量x是否已设置

是的,尽管在一个不太可能的事件中,
BASH=no
会让人困惑

你到底做什么

下面是《曼巴什》(ManBash)的

[…]省略冒号只会导致对未设置的参数进行测试。
${参数:-word}
使用默认值。如果参数未设置或为空(见上文),
单词的扩展被替换了。否则
参数的值被替换。
是否有更好的方法来测试变量是否已设置


是:
[-v BASH]
。但是,这是特定于bash的,因此它无法在执行特定于bash的操作之前检查当前shell是否为bash。

中记录了
${bash no}
的含义:

${参数:-[word]}

使用默认值。如果参数未设置或为空,则应替换word的展开形式(如果省略了word,则替换为空字符串);否则,应替换参数值

省略冒号时的含义(如您的示例中所示)将在后面稍做说明:

在前面所示的参数扩展中,使用格式中的应导致对未设置或空的参数进行测试;省略该项将导致对仅未设置的参数进行测试

还有一张桌子,可能更容易理解。以下是相关行:

参数
已设置且不为空 参数
已设置但为空 参数
未设置 ${参数:-word} 替代参数 代词 代词 ${参数-word} 替代参数 替换空值 代词
${BASH no}
的含义记录在:

${参数:-[word]}

使用默认值。如果参数未设置或为空,则应替换word的展开形式(如果省略了word,则替换为空字符串);否则,应替换参数值

省略冒号时的含义(如您的示例中所示)将在后面稍做说明:

在前面所示的参数扩展中,使用格式中的应导致对未设置或空的参数进行测试;省略该项将导致对仅未设置的参数进行测试

还有一张桌子,可能更容易理解。以下是相关行:

参数
已设置且不为空 参数
已设置但为空 参数
未设置 ${参数:-word} 替代参数 代词 代词 ${参数-word} 替代参数 替换空值 代词 请参阅
manbash
中的“参数扩展”。请参阅
manbash
中的“参数扩展”。