我一直在阅读bash
手册页,并阅读我的系统(CentOS 6.7)上的脚本,并在bash
手册页中查找内容。这是一个很好的练习;例如,我了解了当位置参数中实际上没有选项时如何/etc/profile
检查选项是否已设置(因此不起作用)。-i
getopts
然而,下面这句话让我完全难住了;我在手册页中找不到任何bash
解释它可以做什么的内容:
LESSOPEN="${LESSOPEN-||/usr/bin/lesspipe.sh %s}"
(这是 中一行的一部分/etc/profile.d/less.sh
。)
我只是错过了一些东西吗man bash
?
是的,我曾是中缺少某些内容man bash
: 在 的解释上方${parameter:-word}
,它说Omitting the colon results in a test only for a parameter that is unset.
这是缺少的部分。 (顺便说一句,“可能重复”的问题并未涵盖。)
事实上,分配的默认值是“或”运算符后面的脚本名称,这让我更加困惑! :)
答案1
这并不bash
具体,但它自 1976 年以来就存在于 Bourne Shell 中。
检查 Bourne Shell 手册页:
http://schillix.sourceforge.net/man/man1/bosh.1.html
检查部分参数替换目前从第 7 页开始。
${parameter-word} Use Default Values. If parameter is unset,
the expansion of word is substituted;
otherwise, the value of parameter is substituted.
对于完整的概述,有:
| parameter nonnull | parameter null | parameter unset ___________________|___________________|_________________|________________ ${parameter:-word} | subst. parameter | subst. word | subst. word ___________________|___________________|_________________|________________ ${parameter-word} | subst. parameter | subst. null | subst. word ___________________|___________________|_________________|________________ ${parameter:=word} | subst. parameter | assign word | assign word ___________________|___________________|_________________|________________ ${parameter=word} | subst. parameter | subst. null | assign word ___________________|___________________|_________________|________________ ${parameter:?word} | subst. parameter | error, exit | error, exit ___________________|___________________|_________________|________________ ${parameter?word} | subst. parameter | subst. null | error, exit ___________________|___________________|_________________|________________ ${parameter:+word} | subst. word | subst. null | subst. null ___________________|___________________|_________________|________________ ${parameter+word} | subst. word | subst. word | subst. null ___________________|___________________|_________________|________________