返回
shell脚本中$0 $1 $# $@ $* $? $$ 的各种符号意义详解
闲谈
2023-09-18 01:46:20
一、Shell中的元字符
在Shell中,元字符是一类具有特殊含义的字符,在解析Shell脚本时会发生特殊的行为。常见的元字符包括:
- $*(星号): 星号匹配任意长度的任意字符,包括换行符。例如:
echo *
将会输出当前目录下的所有文件和文件夹。
- $?(问号): 问号匹配单个字符,但不能匹配换行符。例如:
echo ?
将会输出当前目录下的第一个文件或文件夹的名称。
- $#(井号): 井号匹配命令行参数的数量。例如:
echo $#
将会输出命令行参数的数量。
- $@(美元符号加@): 美元符号加@匹配所有命令行参数,但不包括命令本身。例如:
echo $@
将会输出所有命令行参数,以空格分隔。
- $0(美元符号加数字0): 美元符号加数字0匹配当前脚本的名称。例如:
echo $0
将会输出当前脚本的名称。
二、Shell中变量的意义和用法
在Shell中,变量是一种保存数据的特殊字符序列。变量可以用于存储各种数据,如文本、数字、日期、时间等。变量的意义和用法如下:
- $0(美元符号加数字0): 美元符号加数字0表示当前脚本的名称。例如:
echo $0
将会输出当前脚本的名称。
- $1、$2、...、$n(美元符号加数字1到n): 美元符号加数字1到n表示命令行参数的值。例如:
echo $1
echo $2
...
echo $n
将会输出第一个、第二个、...、第n个命令行参数的值。
- $#(井号): 井号表示命令行参数的数量。例如:
echo $#
将会输出命令行参数的数量。
- $@(美元符号加@): 美元符号加@表示所有命令行参数的值,以空格分隔。例如:
echo $@
将会输出所有命令行参数的值,以空格分隔。
- $?(问号): 问号表示上一个命令的退出状态。例如:
ls /tmp
echo $?
将会输出上一个命令的退出状态。如果上一个命令成功执行,?的值为0;如果上一个命令执行失败,?的值为非0。
- $$(美元符号加美元符号): 美元符号加美元符号表示当前脚本的进程ID。例如:
echo $$
将会输出当前脚本的进程ID。
三、Shell中符号的组合使用
在Shell中,符号可以组合使用,以实现更强大的功能。例如:
- $*(星号加@): 星号加@表示所有命令行参数的值,以空格分隔,并作为单个字符串传递给命令。例如:
ls $*
将会列出所有命令行参数指定的文件或文件夹。
- $*(星号加引号): 星号加引号表示所有命令行参数的值,以空格分隔,并作为多个字符串传递给命令。例如:
echo $*
将会输出所有命令行参数的值,以空格分隔。
- $*(星号加方括号): 星号加方括号表示所有命令行参数的值,以空格分隔,并作为数组传递给命令。例如:
args=($*)
echo ${args[0]}
echo ${args[1]}
...
echo ${args[n]}
将会输出第一个、第二个、...、第n个命令行参数的值。