命令替换 &命令组合

在 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���

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。