命令替换主要是指将命令的标准输出值赋值给某个变量。命令替换属于Shell编程中非常重要的功能,需要熟悉掌握。
命令替换的方式
1、反引号:`命令`
2、$():$(命令)
用法说明:date1=`date` #将date命令值给date1变量
date2=$(date) #将date命令值给date2变量
echo ${date1}
echo ${date2}
注意:如果引用的命令输出的内容包含多行,此时如果不通过引用的方式输出变量,则输出的内容将会删除换行符,文件名之间会使用系统默认的空
来填充,即输出内容只占一行。
例如:ls=`ls -l`
#不引用变量值的输出
echo $ls
输出:
total 20 drwxr-xr-x 4 root root 4096 Apr 6 19:08 DotNetCore drwxr-xr-x 4 root root 4096 Apr 18 19:49 hgm -rw-r--r-- 1 root root 6140 Nov 12 2015 mysql-community-release-el7-5.noarch.rpm drwxr-xr-x 2 root root 4096 Feb 22 14:11 tools
#不引用变量值的输出
echo "$ls"
输出:
total 20
drwxr-xr-x 4 root root 4096 Apr 6 19:08 DotNetCore
drwxr-xr-x 4 root root 4096 Apr 18 19:49 hgm
-rw-r--r-- 1 root root 6140 Nov 12 2015 mysql-community-release-el7-5.noarch.rpm
说明:以上反引号的命令替换可以用$()进行替换,由于考虑到反引号和单引号比较像,很容易出错造成代码难以维护,建议使用${}相对比较清晰。
注意:如果是命令嵌套的话就只能使用$()了,反引号不支持。$()仅在Bash Shell中有效,反引号可以在多种UNIX Shell中可以使用。
比如:file_lines=$(wc -l $(ls | sed -n '1p')) #计算ls命令列出的第一个文件的行数,采用了两层嵌套
输出:162 20190320132917.sql