sh </variable>中的$?<variable>

时间:2010-11-04 06:50:40

标签: shell sh


最近我遇到了以下代码...


if [ ! $?target -o $target = "" ]; then
    echo "Target is not set"
fi

我很想知道上面代码片段的逻辑 似乎正在检查,如果我是正确的,是否设置了"$taget""$target"是否为空。

我谷歌找到$?variable如何工作,但我没有找到任何相对搜索结果。

所以请帮助我理解它是如何工作的。在此先感谢。

3 个答案:

答案 0 :(得分:4)

在某些shell中,例如csh,如果设置了$?xyzxyz将评估为1,否则评估为0。

所有代码片段都在检查是否根本没有设置$target或者是否将其设置为空字符串。在这两种情况下,它都假定它没有设置。

请注意,这与bash不同,例如$?是上次执行的命令的返回码。在该shell中,您只需获取返回代码,后跟变量名称,例如0target

答案 1 :(得分:2)

我认为你的剧本有点误引,

if [ ! "$?target" -o "$target" = "" ]; then
    echo "Target is not set"
fi

当$ target未设置时,这确实会打印“Target not set”,但更可靠的方法是: -

if [ "x$foo" = "x" ]; then
    echo "foo is not set"
fi

答案 2 :(得分:-1)

我把“#!sh”放在顶部,第1行并在Mac OS 10.5上运行。终端窗口,它说它的bash ......

原始剧本,[! “$?target”-o“$ target”=“”]' 得到     try.sh:第3行:[:参数太多

IanNorton建议的版本有效:     目标未设置

我在第1行使用#!bash获得相同的结果,第1行没有shell规范。

您的里程可能会有所不同......