在bash shell里 $0 $? $* $@ 各表示什么意思? shell脚本中的$*,$@和$#分别是什么意思?
我没用过$@,但是可以自己写个脚本测试下。
先介绍下我知道的,如下:
位置变量 :$0,$1,$2,$3,$4,$5,$6,$7,$8,$9 $0显示运行的脚本,$1...显示位置参数的值
预定义变量:
$# 表示位置参数的数量
$* 表示所有位置参数的内容
$? 表示命令执行后返回的状态 (执行成功 返回0 执行不成功 返回非0)
$$ 表示当前进程的进程号 希望打开一个进程后不再打开另一个(/proc/)
$! 表示后台运行的最后一个进程号
$0 表示当前的进程名
测试脚本如下:(位置变量只输出到$3)
[root@XP-24-35 script]#vim a.sh
#!/bin/bash
echo '$0 ==> ' $0
echo '$1 ==> ' $1
echo '$2 ==> ' $2
echo '$3 ==> ' $3
echo '$$ ==> ' $$
echo '$* ==> ' $*
echo '$@ ==> ' $@
echo '$# ==> ' $#
echo '$? ==> ' $?
执行结果1(输入小于三个位置参数a,b)
[root@XP-24-35 script]# ./a.sh a b
$0 ==> ./a.sh
$1 ==> a
$2 ==> b
$3 ==>
$$ ==> 4847
$* ==> a b
$@ ==> a b
$# ==> 2
$? ==> 0
执行结果2(刚好输入三个位置参数)
[root@XP-24-35 script]# ./a.sh a b c
$0 ==> ./a.sh
$1 ==> a
$2 ==> b
$3 ==> c
$$ ==> 4844
$* ==> a b c
$@ ==> a b c
$# ==> 3
$? ==> 0
执行结果3(输入大于3个位置参数)
[root@XP-24-35 script]# ./a.sh a b c d e f
$0 ==> ./a.sh
$1 ==> a
$2 ==> b
$3 ==> c
$$ ==> 4852
$* ==> a b c d e f
$@ ==> a b c d e f
$# ==> 6
$? ==> 0
实验结果说明一切,忘采纳,谢谢。
举例说:
脚本名称叫test.sh 入参三个: 1 2 3
运行test.sh 1 2 3后
$*为"1 2 3"(一起被引号包住)
$@为"1" "2" "3"(分别被包住)
$#为3(参数数量)
$0就是该bash文件名,
$?是上一指令的返回值,
$*所有位置参数的内容:就是调用调用本bash shell的参数。
$@基本上与上面相同。
“$*”返回的是一个字符串,字符串中存在多外空格。
“$@”返回多个字符串。
扩展资料:
bash shell 的内置命令: type
语法:type [-tpa] name
参数:
type: 不加任何参数时, type会显示name是外部命令还是bash内置命令
-t: 当加入-t 参数时, type会将name以下面这些字眼显示出它的意义:
file:表示为外部命令;
alias: 表示该命令为命令别名所设置的名称
builtin : 表示该命令为bash内置的命令功能
-p: 如果后面接的name为外部命令时, 才会显示完整文件名
-a :会由PATH变量定义的路径中,将所有含name的命令都列出来,包含alias
type主要在找出“执行文件”而不是一般文件名。所以,这个type也可以用来作为类似which命令的用途。
1、$0
$0指的是这个bash的文件名。
2、$?
$?指的是上一指令的返回值。
3、$*
$*指的是所有位置参数的内容:就是调用调用本bash shell的参数。
4、$@
$@的功能基本上与$*是相同。只不过“$*”返回的是一个字符串,字符串中存在多外空格,而“$@”返回多个字符串。
扩展资料:
bash参数说明:
1、-c字符串
若用-c参数,则bash从字符串中读入命令,如果字符串后还有变量就被设定为从$0开始的位置参数。
2、-i
若用-i参数,则bash是交互的。
3、-s
若用-s参数,则bash从标准输入中读入命令(在执行完-c带的命令之后。)直到输入exit。
4、-
单一的号表明参数执行完毕,并且屏蔽此后所跟参数,后面的所有变量都被看作是文件名。
5、-norc
如果bash是交互的,则不执行个人初始化文件:-/.bashrc,如果bash作为sh来运行,这个参数缺省是关闭的。
6、-noprofile
不执行系统范围的启动文件/etc/profile也不执行个人的启动文件-/.bash_profile,-/.bash_login或-/.profile,缺省情况下,bash作为登录的shell时以这些文件作为启动文件。
7、--refile文件名
如果bash是交互的,则以此文件作为bash的启动文件。替代-/.bashrc。
8、-version
在bash开始时显示此bash的版本号。
9、-quiet
不显示版本号和其他信息,这是缺省值。
10、-login
激活bash,伪装为登录shell。
11、-nobraceexpansion
不执行大括号扩展。
12、-nolineediting
在交互状态下不使用GNU的readline库去读取命令。即取消了命令行编辑功能。
13、-posix
改变bash的行为,使其符合Posix 1003.2规定的标准。
参考资料:百度百科-bash
$0就是该bash文件名
$?是上一指令的返回值
$*所有位置参数的内容:就是调用调用本bash shell的参数。
$@基本上与上面相同。只不过是
“$*”返回的是一个字符串,字符串中存在多外空格。
“$@”返回多个字符串。
$0就是该bash文件名
$?是上一指令的返回值
$*所有位置参数的内容:就是调用调用本bash shell的参数。
$@基本上与上面相同。只不过是
“$*”返回的是一个字符串,字符串中存在多外空格。
“$@”返回多个字符串。
还有$#返回所有位置参数的个数。