我发现了一个包含以下语句的Shell脚本:
if [ $val -eq $? ]
这里的$?
是什么意思?
$?
返回最近一个完成的命令的状态。
状态 0 表示一切正常完成。
此外,$
符号是一个特殊的符号 - 在这种情况下,$val
提取由变量 val
所保存的值。
$#
= 参数个数。答案是3
。
$@
= 传递的参数。答案是1 2 3
。
$?
= 上一个命令是否成功执行。答案是0
,表示“是”。
这里的$?是指退出状态的最后结果,0默认表示“成功”。
bash# ls *.*
bash# echo $?
bash# 0
bash# ls /tmp/not/existing/
bash# echo $?
bash# 2
这是上一个命令的退出状态值。如果成功,该值为0
。
ls *.*
或者 ls
会产生相同的结果。它的意思是在当前目录中显示一个或多个具有任何扩展名的文件。
echo $?
会显示退出状态码。如果上一个命令至少显示了一个文件,则退出状态码为零(成功)。
ls *.*
将过滤当前目录的内容,并仅显示其中带有句点的文件和目录;对于目录,它将显示其内容(可能取决于实现)。还请查看以下命令mkdir test && cd test && ls; echo "$?"
将返回0。但是,mkdir -m -r wo_dir && cd wo_dir && echo "test" > 1.txt && ls; echo "$?"
将返回1,并显示消息ls: .: Permission denied
,即使文件已创建。 - artdanil