当我浏览一些shell脚本时,我遇到了以下代码行
FILENAME=/home/user/test.tar.gz
tar -zxvf $FILENAME
RES=$?FILENAME
if [ $RES -eq 0 ]; then
echo "TAR extract success
fi
我想知道
答案 0 :(得分:3)
在标准(POSIX-ish)shell中,$?
是special parameter。甚至Bash的parameter expansion也没有记录另一种含义。
在上下文中,如果上一个命令成功,$?FILENAME
可能会扩展到0FILENAME
,如果失败,1FILENAME
可能会扩展到-eq
。
由于请求了数字比较(0FILENAME
),值0
可能会转换为if [ 0FILE -eq 0 ]; then echo equal; fi
,然后比较OK。但是,在我的系统(Mac OS X 10.10.5,Bash 3.2.57)上尝试:
-bash: [: 0FILE: integer expression expected
产生错误FILENAME
。
因此,在$?
之后添加var count = (new string[]{"1","2","3","4","5"}).Contains(Console.ReadLine()) ? 1 : 0;
充其量是非正统的(或者令人困惑,甚至最终都是错误的)。
答案 1 :(得分:1)
按default
,函数的exit status
是函数中最后一个命令返回的退出状态。函数执行后,您使用标准$?
变量determine
函数的退出状态:
#!/bin/bash
# testing the exit status of a function
my_function() {
echo "trying to display a non-existent file"
ls -l no_file
}
echo "calling the function: "
my_function
echo "The exit status is: $?"
$
$ ./test4
testing the function:
trying to display a non-existent file
ls: badfile: No such file or directory
The exit status is: 1
检查tar是否成功执行
tar xvf "$tar" || exit 1