BlackCrystal Asked: 2018-12-30 04:50:11 +0800 CST2018-12-30 04:50:11 +0800 CST 2018-12-30 04:50:11 +0800 CST 如何使用包含“和”的命令创建别名 [重复] 772 前几篇文章有人问如何以百分比显示内存。有人回复: free | awk '/^Mem/ { printf("free: %.2f %\n", $4/$2 * 100.0) }' 我想知道是否可以将此命令转换为 ~/.bashrc 中的别名。但是别名的语法是: alias aliasname='command' 我怎样才能做到这一点?该命令同时包含'和"。我尝试了不同的方法,但没有奏效。这甚至可能吗?我错过了什么吗? bash quoting 2 个回答 Voted ilkkachu 2018-12-30T06:59:24+08:002018-12-30T06:59:24+08:00 说别名的语法alias aliasname='command'有点误导,因为它似乎暗示单引号是语法的一部分。他们不是。等号后面的部分类似于变量赋值,因为它可以是任何 shell word,由普通字符(不带引号)、带引号的字符串或组合组成。 这些都是有效的,最后三个等效: alias ks=ls alias ls='ls -l' alias ls="ls -l" alias ls=ls\ -l 因此,您需要做的就是正确转义引号以将它们包含在别名值中。 参见,例如这个答案和其他答案,例如这些问题的讨论: 如果已经使用了单引号和双引号,如何用引号括起来? 打印包含单引号和其他特殊字符的字符串 或者,使用函数而不是别名来完全摆脱引用问题: freemem() { free | awk '/^Mem/ { printf("free: %.2f %\n", $4/$2 * 100.0) }' } Best Answer Arkadiusz Drabczyk 2018-12-30T04:59:20+08:002018-12-30T04:59:20+08:00 你需要: alias aliasname="free | awk '/^Mem/ { printf(\"free: %.2f %\n\", \$4/\$2 * 100.0) }'" 请注意,您需要同时转义"和$。
说别名的语法
alias aliasname='command'
有点误导,因为它似乎暗示单引号是语法的一部分。他们不是。等号后面的部分类似于变量赋值,因为它可以是任何 shell word,由普通字符(不带引号)、带引号的字符串或组合组成。这些都是有效的,最后三个等效:
因此,您需要做的就是正确转义引号以将它们包含在别名值中。
参见,例如这个答案和其他答案,例如这些问题的讨论:
或者,使用函数而不是别名来完全摆脱引用问题:
你需要:
请注意,您需要同时转义
"
和$
。