Bash 这个if条件是否等同于测试变量的存在性?
我正在我的Mac电脑上翻找一些系统文件。在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是否已设置 进一步的问题:-到底做什
/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
中的“参数扩展”。