返回

shell脚本中$0 $1 $# $@ $* $? $$ 的各种符号意义详解

闲谈

一、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个命令行参数的值。