3. 命令替换

命令替换是指执行一个命令,返回此命令的标准输出的字符串。将此字符串替换到当前位置。

字符串替换可以用来替换当前位置的命令、参数以及创建变量时的值等。

命令替换语法

`命令 ...`
# 或
$(命令 ...)

... 代表选项和参数

$(命令 ...) 是比较新的语法,支持嵌套调用

示例

weimingze@mzstudio:~$ CUR_PATH=`pwd`
weimingze@mzstudio:~$ echo $CUR_PATH
/home/weimingze
weimingze@mzstudio:~$ CUR_PATH2=$(pwd)
weimingze@mzstudio:~$ echo ${CUR_PATH2}
/home/weimingze
weimingze@mzstudio:~$

找到 /etc/ 文件夹下所有名字叫 passwd 的文件(包含子文件夹),然后详细列出这些文件的信息

weimingze@mzstudio:~$ ls -l `find /etc/ -name "passwd" 2> /dev/null`
-rw-r--r-- 1 root root   92 Feb 22  2024 /etc/pam.d/passwd
-rw-r--r-- 1 root root 2919 May 22 11:44 /etc/passwd
weimingze@mzstudio:~$ ls -l $(find /etc/ -name "passwd" 2> /dev/null)
-rw-r--r-- 1 root root   92 Feb 22  2024 /etc/pam.d/passwd
-rw-r--r-- 1 root root 2919 May 22 11:44 /etc/passwd

使用 `命令 ...` 和 $(命令 ...) 都能达到同样的效果。

$(命令 ...) 内部还可以嵌套命令,比如 $(命令 $(命令2 ...)) 是合法的。

注意事项:

命令替换可以用于双引号(")字符串中,但不能用于单引号(')字符串中,如:

weimingze@mzstudio:~$ MYSHELL="ls -l `tail -1 /etc/shells`"
weimingze@mzstudio:~$ echo ${MYSHELL}
ls -l /usr/bin/dash
weimingze@mzstudio:~$ MYSHELL="ls -l $(tail -1 /etc/shells)"
weimingze@mzstudio:~$ echo ${MYSHELL}
ls -l /usr/bin/dash
weimingze@mzstudio:~$ MYSHELL='ls -l `tail -1 /etc/shells`'
weimingze@mzstudio:~$ echo ${MYSHELL}
ls -l `tail -1 /etc/shells`
weimingze@mzstudio:~$ MYSHELL='ls -l $(tail -1 /etc/shells)'
weimingze@mzstudio:~$ echo ${MYSHELL}
ls -l $(tail -1 /etc/shells)
weimingze@mzstudio:~$ 

练习:

  1. 使用 cat 命令,将 /etc/ 文件夹下所有以 group 开头的文件的内容使用输出重定向拼接成一个大的文件保存在 result.txt 中,