Shell变量名使用的特殊字符 [转]
$# 传送给命令Shell的参数个数
$- 在Shell启动或使用set命令时提供选项
$? 上一条命令执行后返回的值
$$ 当前shell的进程号
$! 上一个子进程的进程号
$@ 所有的参数,每个都用双括号括起
$* 所有参数,用双括号括起
$n 位置参数值,n表示位置
$0 当前shell名
#
!
/
bin
/
sh
#
become a dmh_wish script /
exec dmh_wish -notk -f
"
$0
"
"
$@
"
......
$- 在Shell启动或使用set命令时提供选项
$? 上一条命令执行后返回的值
$$ 当前shell的进程号
$! 上一个子进程的进程号
$@ 所有的参数,每个都用双括号括起
$* 所有参数,用双括号括起
$n 位置参数值,n表示位置
$0 当前shell名
$1..$9 第N个参数
实例
我在公司使用tcl/tk脚本进行编程,但在unix或linux环境中并不能保证每次tcl的解释器都被安装在同一个目录下,如/bin,所以为了程序不至于每次移植时都要修改第一句的#!/bin/tclsh到相应的安装目录,由于sh安装的目录相对固定,故采用以下方法:
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
第一句 #!/bin/sh 使文件被sh解释器解释
第二句 为注释,不执行
第三句 $0指当前shell名,#@为所有参数,所以这句使文件再次被tcl/tk的解释器解释运行。这次运行时,第一句"#!/bin/sh" 被tcl/tk解释器作为注释,不予执行;第二句也为注释,但由于其最后有一个"/",故根据tcl的语法规则,第三句语句被当作和第二句为同一命令,故也为注释,不予执行;这样就不会再次执行该文件,而是继续执行随后的tcl代码。