![如何使 bash 别名与命令包含一起使用,即 $()(美元符号和括号)](https://linux22.com/image/181131/%E5%A6%82%E4%BD%95%E4%BD%BF%20bash%20%E5%88%AB%E5%90%8D%E4%B8%8E%E5%91%BD%E4%BB%A4%E5%8C%85%E5%90%AB%E4%B8%80%E8%B5%B7%E4%BD%BF%E7%94%A8%EF%BC%8C%E5%8D%B3%20%24()%EF%BC%88%E7%BE%8E%E5%85%83%E7%AC%A6%E5%8F%B7%E5%92%8C%E6%8B%AC%E5%8F%B7%EF%BC%89.png)
我曾经有过这样的别名:
alias mount-open="sudo mount $(sudo blkid | gawk '/2tb-open/ { print substr($1, 0, 9) }') 2tb-open"
我不能 100% 确定它是相同的,但 100% 它是 bash 别名,而不是 bash 函数,并且它包含其他命令而不使用变量等。
现在我无法完成这项工作。如果我加上双引号(如示例中所示),它会尝试在终端启动时运行一些 sudo 命令。如果我使用单引号并转义中间的引号:
alias mount-open='sudo mount $(sudo blkid | gawk \'/2tb-open/ { print substr($1, 0, 9) }\') 2tb-open'
它说:
bash: .bashrc: line 25: syntax error near unexpected token `('
我想这与默认 Ubuntu bashrc 中的“额外代码”有关,与 Fedora 相比,Fedora 相当精简。我的意思是,它可以在 Ubuntu 上运行。几年前,我安装了 Fedora 并将 bashrc 文件从我的 Ubuntu 系统复制到其中,别名等工作正常。一周前它在 Fedora 32(带有 Ubuntu bashrc)中工作。但现在我的数据丢失了,我正在尝试“重新发明”它。目前我正在使用默认的 Fedora bashrc 文件,该文件最初只有 15 行
谁能建议如何解决这个问题?
谢谢。
答案1
使用函数或脚本会更容易:
mount-open() {
sudo mount "$(
sudo blkid |
gawk '/2tb-open/ { print substr($1, 0, 9) }'
)" 2tb-open
}
不过如果你想安装带有标签的设备2tb-open
,
mount-open() { sudo mount LABEL=2tb-open 2tb-open; }
应该足够了。
答案2
单引号不能在单引号字符串内转义。您需要退出双引号并稍后重新输入:
alias mount-open='sudo mount $(sudo blkid | gawk '\''/2tb-open/ { print substr($1, 0, 9) }'\'') 2tb-open'