我是Bash脚本的新手,有人可以向我解释$#和$?在以下代码中工作?
#!/bin/bash
ARGS=3 # Script requires 3 arguments.
E_BADARGS=85 # Wrong number of arguments passed to script.
if [ $# -ne "$ARGS" ]
then
echo "Usage: `basename $0` old-pattern new-pattern filename"
exit $E_BADARGS
fi
old_pattern=$1
new_pattern=$2
if [ -f "$3" ]
then
file_name=$3
else
echo "File \"$3\" does not exist."
exit $E_BADARGS
fi
exit $?
答案 0 :(得分:23)
# Builtin variables:
# There are some useful builtin variables, like
echo "Last program's return value: $?"
echo "Script's PID: $$"
echo "Number of arguments passed to script: $#"
echo "All arguments passed to script: $@"
echo "Script's arguments separated into different variables: $1 $2..."
答案 1 :(得分:5)
来自https://www.gnu.org/software/bash/manual/html_node/Special-Parameters.html
$#
扩展为十进制位置参数的数量。
$?
扩展到最近执行的前台管道的退出状态。
答案 2 :(得分:1)
$#
显示脚本参数的编号
$?
显示最后一个脚本的返回值
关于echo "ARG[$#]"
之前的if
参数,然后像
script.sh 1
输出将是
ARG[1]
Usage: g old-pattern new-pattern filename
等等
$?
的输出也可以在命令行中使用:
#shell>ls
file1.txt g inpu nodes_list
#shell>echo $?
0
#shell>ls FileNameNotFound
ls: FileNameNotFound: No such file or directory
#shell> echo $?
1
答案 3 :(得分:0)
在 bash 中存在特殊的变量...然后我给你写了一些。
$#- 这是一个特殊变量,它包含您传递给脚本的命令行数量(您可以只计算输入了多少参数)。 tis 变量也代表最后一个命令行,但最好这样做 ${!#}
$?- 这个很特别,因为它代表你的脚本很好这个变量保存了以前命令的退出状态......它有点令人困惑,但它工作得很好......当你结束你的脚本时,你可以最后定位这个变量,如果她返回 0 值,你的脚本是完美的,如果她返回 1 或其他,你必须检查你的台词。