Bash:if语句中的返回代码导致意外行为
我正在使用Bash:if语句中的返回代码导致意外行为,bash,cmp,Bash,Cmp,我正在使用cmp命令检查两个文件是否相同。我想将命令插入一行if语句中,但它没有按预期工作。当比较两个文件而其中一个文件不存在时,cmp返回2。由于2是非零的,我希望if语句的计算结果为true,但事实并非如此,我也不明白为什么 我想写一些像: if cmp -s tickets.txt tickets_orig.txt; then #do stuff here fi 因为我觉得它短,甜,更直观。这可能吗 我可以使用$?创建一个变通方法,但我不明白为什么当命令返回2时,下面的代码将计算为t
cmp
命令检查两个文件是否相同。我想将命令插入一行if语句中,但它没有按预期工作。当比较两个文件而其中一个文件不存在时,cmp
返回2。由于2是非零的,我希望if语句的计算结果为true,但事实并非如此,我也不明白为什么
我想写一些像:
if cmp -s tickets.txt tickets_orig.txt; then
#do stuff here
fi
因为我觉得它短,甜,更直观。这可能吗
我可以使用$?
创建一个变通方法,但我不明白为什么当命令返回2时,下面的代码将计算为true,上面的代码将计算为false:
cmp -s tickets.txt tickets_orig.txt
if [ $? -ne 0 ]; then
#do stuff here
fi
退出状态($?)=0表示shell逻辑成功,它允许为异常状态定义不同的错误代码1到127
if command; then #...
相当于
command;
if [ $? -eq 0 ]; then #...
if ! command; then #...
及
相当于
command;
if [ $? -eq 0 ]; then #...
if ! command; then #...
退出状态($?)=0表示shell逻辑成功,它允许为异常状态定义不同的错误代码1到127
if command; then #...
相当于
command;
if [ $? -eq 0 ]; then #...
if ! command; then #...
及
相当于
command;
if [ $? -eq 0 ]; then #...
if ! command; then #...
“由于2不是零,我希望if语句的计算结果为true”-
0
表示Bash成功。只有当文件相同时,才会执行if
块。反转条件:if!cmp-s tickets.txt tickets\u orig.txt;然后…
“由于2不是零,我希望if语句的计算结果为true”-0表示Bash成功。只有当文件相同时,才会执行if
块。反转条件:if!cmp-s tickets.txt tickets\u orig.txt;然后…