本文总结了Linux中的$符号的各种用法
用法一:
显示脚本参数(?、@、!)(本质上属于变量替换)
{10}.
$?:是上一指令的返回值,成功是0,不成功是1。一般来说,UNIX(linux) 系统的进程以执行系统调用exit() 来结束的。这个回传值就是status值。回传给父进程,用来检查子进程的执行状态。一般指令程序倘若执行成功,其回传值为 0;失败为 1。
$*:所有脚本参数的内容:就是调用调用本bash shell的参数。
*”返回的是一个字符串,字符串中存在多外空格。 “$@”返回多个字符串。
$#:返回所有脚本参数的个数。
$$ :Shell本身的PID(ProcessID),即当前进程的PID。
$! :Shell最后运行的后台Process的PID
$- :使用Set命令设定的Flag一览
示例:
touch variable
vi variable
脚本内容如下:
!/bin/sh
echo "number:$#"
echo "scname:$0"
echo "first :$1"
echo "second:$2"
echo "argume:$@"
保存退出
赋予脚本执行权限
chmod +x variable
执行脚本
./variable aa bb
number:2
scname:./variable
first: aa
second:bb
argume:aa bb
通过显示结果可以看到:
$# 是传给脚本的参数个数
$0 是脚本本身的名字
$1是传递给该shell脚本的第一个参数
$2是传递给该shell脚本的第二个参数
$@ 是传给脚本的所有参数的列表
用法二:
获取变量与环境变量的值
如:path=2,则echo {path}显示的就是path的值。
在linux及unix的sh中,以PATH表示的是系统的命令搜索路径,和windows的%path%是一样的$HOME则表示是用户的主目录,也就是用户登录后工作目录
示例:echo $PATH.
用法三:
shell中( )、``与${ }的区别
说明:
${ }这种形式其实与用法一和二是一样的,属于变量替换的范畴,只不过在变量替换中可以加上大括号,也可以不加大括号。
简而言之:[ ],{ }属于变量替换
(1)$( )与``(反引号):返回括号中命令的结果
在bash中,$( )与` `(反引号)都是用来作命令替换的,执行括号或者反引号中的命令。
命令替换与变量替换差不多,都是用来重组命令行的,先完成引号里的命令行,然后将其结果替换出来,再重组成新的命令行
示例:命令:(date "+%Y-%m-%d"),显示:today is 2014-07-01
注:在操作上,这两者都是达到相应的效果,但是建议使用$( ),理由如下:
1)``很容易与''搞混乱,尤其对初学者来说。
2)在多层次的复合替换中,``必须要额外的跳脱处理(反斜线),而$( )比较直观。
最后,$( )的弊端是,并不是所有的类unix系统都支持这种方式,但反引号是肯定支持的。
示例:
1# 将cmd1执行结果作为cmd2参数,再将cmd2结果作为cmd3的参数
cmd3 $(cmd2 $(cmd1))
2 # 如果是用反引号,直接引用是不行的,还需要作跳脱处理
cmd3 `cmd2 \`cmd1\``
(2)${ }变量替换
一般情况下,{var}是没有区别的,但是用${ }会比较精确的界定变量名称的范围
示例:
取路径、文件名、后缀
先赋值一个变量为一个路径,如下:
file=/dir1/dir2/dir3/my.file.txt
记忆方法如下:
是去掉左边(在键盘上 # 在 $ 之左边)
% 是去掉右边(在键盘上 % 在 $ 之右边)
单一符号是最小匹配;两个符号是最大匹配
*是用来匹配不要的字符,也就是想要去掉的那部分
还有指定字符分隔号,与*配合,决定取哪部分
————————————————
版权声明:本文为CSDN博主「木木统」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_37766087/article/details/99974385
网友评论