Linux shell脚本中的比较
我真的不明白这一点。我想,我可以编写一个返回代码比较,如下所示。哪个更好?为什么会这样Linux shell脚本中的比较,linux,shell,unix,logical-operators,Linux,Shell,Unix,Logical Operators,我真的不明白这一点。我想,我可以编写一个返回代码比较,如下所示。哪个更好?为什么会这样 RC=$? if [[ $RC == '0' ]]; then if [ $RC -eq '0' ]; then if [ $RC == '0' ]; then if [ "$RC" == "0" ]; then if [ "$RC" -eq "0" ]; then if [[ "$RC" == "0" ]]; then if (( "$RC" == "0" )); then if ( "$RC" == "
RC=$?
if [[ $RC == '0' ]]; then
if [ $RC -eq '0' ]; then
if [ $RC == '0' ]; then
if [ "$RC" == "0" ]; then
if [ "$RC" -eq "0" ]; then
if [[ "$RC" == "0" ]]; then
if (( "$RC" == "0" )); then
if ( "$RC" == "0" ); then
if (( $RC == 0 )); then
if ( $RC == 0 ); then
还有一些
如果
RC=“A”
--String怎么办?如果您在Bash
中,它不会按类型分隔变量,而是。。。返回是一个数值,所以我打赌:
rc=$?
if (( ! rc )); then
# rc == 0
Do something
fi
原因:与预期的类型保持一致
检查:如果您在Bash
中,它不会按类型分隔变量,而是。。。返回是一个数值,所以我打赌:
rc=$?
if (( ! rc )); then
# rc == 0
Do something
fi
原因:与预期的类型保持一致
勾选:以上各项均不适用。在绝大多数情况下,您希望直接从if
中检查退出代码。任何看起来像
command
RC=$?
if [ $RC == 0 ]; then
写得更加优雅、有力和习惯
if command; then
除非您特别需要检查结果代码的精确非零值
要单独解决您关于使用哪个比较运算符的问题,唯一完全可移植的变体是[
with=
。此传统Bourne shell运算符的语法不可移植地支持=
以实现相等,因此这是错误的(尽管某些shell允许将其作为语法安全网)“-eq
运算符比较数值相等,而=
执行字符串比较。”
在现代shell中,[[
和(
都是可行的,这取决于您是更关心字符串比较(这是[[
有意义的地方)还是算术(这是((
——如果比较涉及到数字的一些实际计算,则特别有用;但它肯定是更边缘的选择,因为它对字符串比较根本没有用处)。[[
还支持模式匹配,因此您不局限于静态字符串比较;与[
,它需要一个双等号来进行字符串相等比较。它解决了[
的一些棘手问题,包括但不限于使用以破折号开头的无引号变量和参数的正确行为
带有一个括号的替代方案根本不能满足您的需要。它试图在子shell中作为命令运行$RC
。以上都没有。在绝大多数情况下,您希望直接从if
中检查退出代码。任何类似于
command
RC=$?
if [ $RC == 0 ]; then
写得更加优雅、有力和习惯
if command; then
除非您特别需要检查结果代码的精确非零值
要单独解决您关于使用哪个比较运算符的问题,唯一完全可移植的变体是[
with=
。此传统Bourne shell运算符的语法不可移植地支持=
以实现相等,因此这是错误的(尽管某些shell允许将其作为语法安全网)“-eq
运算符比较数值相等,而=
执行字符串比较。”
在现代shell中,[[
和(
都是可行的,这取决于您是更关心字符串比较(这是[[
有意义的地方)还是算术(这是((
——如果比较涉及到数字的一些实际计算,则特别有用;但它肯定是更边缘的选择,因为它对字符串比较根本没有用处)。[[
还支持模式匹配,因此您不局限于静态字符串比较;与[
,它需要一个双等号来进行字符串相等比较。它解决了[
的一些棘手问题,包括但不限于使用以破折号开头的无引号变量和参数的正确行为
带有单括号的替代方案完全不能满足您的需要。它尝试在子shell中作为命令运行$RC
。在unix中搜索stirng和number比较,并在unix中使用c语法对两者进行比较在unix中搜索stirng和number比较,在UnixC中使用c语法对两者进行比较。您可以解释一下吗你为什么赌(())?有什么好处吗?个人品味@realspirituals,在回答更新的问题时解释。感谢迄今为止的努力。你能解释一下你为什么赌(())吗?有什么好处?回答中解释的个人品味@realspirituals更新了问题。感谢迄今为止的努力-感谢您的努力。如果它是字符串呢?命令的返回值$?
永远不是字符串。您可以使用if[$?-eq 0]
对于这些情况。另一种可能是跳过关键字if
,但我只在少数情况下使用它:向上投票-感谢您的努力。如果它是字符串呢?命令的返回值$?
从来不是字符串。如果[$?-eq 0],您可以使用if[$?-eq 0]
用于这些情况。另一种可能是跳过关键字(如果
),但我只在少数情况下使用: