用于 ?在sh脚本中

时间:2015-08-22 07:03:57

标签: bash shell tar

当我浏览一些shell脚本时,我遇到了以下代码行

FILENAME=/home/user/test.tar.gz
tar -zxvf $FILENAME
RES=$?FILENAME
if [ $RES -eq 0 ]; then
    echo "TAR extract success
fi

我想知道

  1. '有什么用?'在变量前面标记(RES = $?FILENAME)。
  2. 如何检查tar是否已成功提取

2 个答案:

答案 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