感悟网 导航

在bash shell里 $0 $? $* $@ 各表示什么意思? shell脚本中的$*,$@和$#分别是什么意思?

作者&投稿:郗毅 (若有异议请与网页底部的电邮联系)
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的参数。
$@基本上与上面相同。只不过是
“$*”返回的是一个字符串,字符串中存在多外空格。
“$@”返回多个字符串。

还有$#返回所有位置参数的个数。

   

返回顶部
本页内容来自于网友发表,若有相关事宜请照下面的电邮联系
感悟网