在 bash shell 脚本编程中中,$( ) 与 ` ` (反引号) 都是用来做命令替换用(command substitution)的,命令替换是指shell可以先执行命令,将输出结果暂时保存(赋给变量),以后在适当的地方输出。
命令替换
其中$()方法被称为子shell,子shell 本身就是独立的进程,可以使用()操作符来定义一个子shell。当命令在子shell 中执行时,不会对当前shell 有任何影响;所有的改变仅限于子shell 内,如
[root@localhost ~]# pwd
/root
[root@localhost ~]# (cd /test/;ls)
book fastjson-1.2.59.jar jar jdk META-INF php Book flask java locatgit mongodb-linux-x86_64-3.0.6 __pycache__ redis.tar.gz sun
interfacesrc java_code log.txt rest-assured-4.0.0-deps test
com1 io javax maven org python3 rest-assured-4.0.0-deps.zip
[root@localhost ~]# pwd
/root
[root@localhost ~]#
而 $( ) 并不见得每一种 shell 都能使用,若你用 bash2 的话,肯定没问题。
反引号``,是另外一种命令替换命令。作用是将一个命令结果赋值给一个变量。
[root@localhost ~]# ls
anaconda-ks.cfg assure base.txt block.py block.pyc bookdfs.py downm.asp?id=43898 id_rsa id_rsa.pub java.txt javavsphp jenkins [root@localhost~]#
[root@localhost ~]# dirlist=`ls`
[root@localhost ~]# echo $dirlist
anaconda-ks.cfg assure base.txt block.py block.pyc bookdfs.py downm.asp?id=43898 id_rsa id_rsa.pub java.txt javavsphp jenkins
[root@localhost ~]#
命令组合
语法格式如下:
(command1;command2[;command3...])
1. 一条命令需要独占一个物理行,如果需要将多条命令放在同一行,命令之间使用命令分隔符(;)分隔。执行的效果等同于多个独立的命令单独执行的效果。
2. () 表示在当前 shell 中将多个命令作为一个整体执行。需要注意的是,使用 () 括起来的命令在执行前面都不会切换当前工作目录,也就是说命令组合都是在当前工作目录下被执行的,尽管命令中有切换目录的命令。
3. 命令组合常和命令执行控制结合起来使用。
[root@importer1~]# array=("acqD" "innport" "innScan""Outport" "OutScan" "sdD" "Spam");
[root@importer1~]# echo "${array[@]}" | grep -wq "out" && echo "arg is right" || ( echo"arg is wrong"; exit 11);
arg iswrong
[root@importer1~]# echo $?
11
RPvG���
网友评论