美元符号$的两种不同的用法
1.取变量的值(变量替换)
bash
[user2@master sbin]$ name="John"
[user2@master sbin]$ echo $name
John
[user2@master sbin]$ echo ${name}
John
2.取命令的输出(命令替换)
旧式语法:反引号`
bash
[user2@master sbin]$ echo `date` # 执行date命令,输出其执行结果
Mon May 11 22:54:09 CST 2026
[user2@master sbin]$ echo `which adduser`
/usr/sbin/adduser
新式语法:$()
bash
[user2@master sbin]$ echo $(date)
Mon May 11 22:55:25 CST 2026
[user2@master sbin]$ echo $(which adduser)
/usr/sbin/adduser
| 语法 | 名称 | 作用 | 示例 |
|---|---|---|---|
$var |
变量替换 | 取变量的值 | $HOME → /home/user |
$(command) |
命令替换 | 先执行命令,再用输出结果替换 | $(date) → 2026-05-11... |
容易混淆的例子:
bash
[user2@master sbin]$ echo $date # 取变量date的值,发生变量替换,$date换成变量date的值:"Hello"
Hello
[user2@master sbin]$ echo $(date) # 执行系统命令date
Mon May 11 22:58:32 CST 2026
一个结合dirname命令的例子
bash
[user2@master ~]$ which adduser # 查看adduser命令的所在路径
/usr/sbin/adduser
[user2@master ~]$ cd $(dirname $(which adduser)) # 切换到adduser命令所在的那个目录
[user2@master sbin]$ pwd
/usr/sbin