linux中shell变量$#,$@,$0,$1,$2的含义解释:
变量说明:
$$
Shell本身的PID(ProcessID)
$!
Shell最后运行的后台Process的PID
$?
最后运行的命令的结束代码(返回值)
$-
使用Set命令设定的Flag一览
$*
所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
$@
所有参数列表。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
$#
添加到Shell的参数个数
$0
Shell本身的文件名
$1~$n
扩展为从1开始的位置参数。
双引号对中的*被扩展为单一的word字,这个字的值是由以第一个IFS字符分隔每个位置参数组成的字符序列。
即"$*" 扩展为"$1c$2c..", 其中c是IFS值中的第一个字符。
如果IFS没有定义,那么c为space;如果IFS为空,那么c为空。
@ 参数
扩展为从1开始的位置参数。
双引号对中的@被扩展为多个分开的word字,即"$@" 扩展为"$1" "$2" ...
如果双引号扩展发生在一个字中,如abc"$@"def,扩展后的第一个字与原始字的开头部分abc相连,扩展后的最后一个字与原始字的后面部分def相连。
当没有位置参数时,"$@" 和$@扩展为nothing,即它们被移除。
变量说明:
$$
Shell本身的PID(ProcessID)
$!
Shell最后运行的后台Process的PID
$?
最后运行的命令的结束代码(返回值)
$-
使用Set命令设定的Flag一览
$*
所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
$@
所有参数列表。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
$#
添加到Shell的参数个数
$0
Shell本身的文件名
$1~$n
添加到Shell的各参数值。$1是第1参数、$2是第2参数…。
$@和$*都代表所有命令行参数,但是二者是有区别的。
$*将命令行上提供的所有参数当作一个参数来保存,$@将命令行上提供的所有参数当作一个字符串中的多个独立的参数来保存。
通常都是在程序中使用$@,并且用双引号引起来。
* 参数扩展为从1开始的位置参数。
双引号对中的*被扩展为单一的word字,这个字的值是由以第一个IFS字符分隔每个位置参数组成的字符序列。
即"$*" 扩展为"$1c$2c..", 其中c是IFS值中的第一个字符。
如果IFS没有定义,那么c为space;如果IFS为空,那么c为空。
@ 参数
扩展为从1开始的位置参数。
双引号对中的@被扩展为多个分开的word字,即"$@" 扩展为"$1" "$2" ...
如果双引号扩展发生在一个字中,如abc"$@"def,扩展后的第一个字与原始字的开头部分abc相连,扩展后的最后一个字与原始字的后面部分def相连。
当没有位置参数时,"$@" 和$@扩展为nothing,即它们被移除。
示例:
1
#!/bin/bash 2
# 3
printf "The
complete list is %s\n" "$$" 4
printf "The
complete list is %s\n" "$!" 5
printf "The
complete list is %s\n" "$?" 6
printf "The
complete list is %s\n" "$*" 7
printf "The
complete list is %s\n" "$@" 8
printf "The
complete list is %s\n" "$#" 9
printf "The
complete list is %s\n" "$0" 10
printf "The
complete list is %s\n" "$1" 11
printf "The
complete list is %s\n" "$2 |
结果:
[Aric@localhost
~]$ bash params .sh
123456 QQ The
complete list is 24249 The
complete list is The
complete list is 0 The
complete list is 123456
QQ The
complete list is 123456 The
complete list is QQ The
complete list is 2 The
complete list is params .sh The
complete list is 123456 The
complete list is QQ |