Bash中的$#有什么用途?

21

我对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个回答

33

来自在Y分钟内学习Bash

# 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 "The script's name: $0"
echo "Script's arguments separated into different variables: $1 $2..."

7

3

$# 显示脚本参数的数量 $? 显示上一个脚本的返回值

关于参数: 在 if 之前使用 echo "ARG[$#]", 然后执行脚本

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

0

在Bash中存在特殊变量...我给你写一些。

$#- 这是一个特殊变量,它包含了命令行中的参数数量(你可以简单地计算输入了多少参数),它也代表了最后一个命令行,但最好使用 ${!#}。

$?- 这个非常特殊,因为它代表着你的脚本是否正常,这个变量保存了前一个命令的退出状态...有点混乱,但它完美地工作...当你结束你的脚本时,你可以将这个变量定位到结尾,如果它返回0值,你的脚本就是完美的,如果它返回1或其他值,你必须检查你的代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接