Bash中$#的用途是什么?

时间:2016-03-15 09:29:08

标签: linux bash

我是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 $? 

4 个答案:

答案 0 :(得分:23)

来自Learn Bash in Y minutes

# 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 或其他,你必须检查你的台词。