What is the use of $# in Bash

2020-02-10 14:21发布

I am very new to Bash scripting, can someone explain to me how the $# and $? work in the following code?

#!/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 $? 

标签: linux bash
3条回答
Rolldiameter
2楼-- · 2020-02-10 14:32

From 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 "The script's name: $0"
echo "Script's arguments separated into different variables: $1 $2..."
查看更多
Rolldiameter
3楼-- · 2020-02-10 14:34

From https://www.gnu.org/software/bash/manual/html_node/Special-Parameters.html

$# Expands to the number of positional parameters in decimal.

$? Expands to the exit status of the most recently executed foreground pipeline.

查看更多
劫难
4楼-- · 2020-02-10 14:42

$# shows the number of the script's arguments $? shows the last script's return value

about arguments: echo "ARG[$#]" before if and then execute the script like

script.sh 1 

the ouput will be

ARG[1]
Usage: g old-pattern new-pattern filename

and so on

the ouput of $? could be also used on the command line:

#shell>ls
file1.txt        g                inpu             nodes_list
#shell>echo $?
0

#shell>ls FileNameNotFound
ls: FileNameNotFound: No such file or directory
#shell> echo $?
1
查看更多
登录 后发表回答