如何使用包含'和'的命令创建别名


10

几篇文章之前,有人问如何以百分比显示内存。有人回复:

free | awk '/^Mem/ { printf("free: %.2f %\n", $4/$2 * 100.0) }'

我想知道是否可以将此命令转换为〜/ .bashrc中的别名。但是别名的语法是:

alias aliasname='command'

我怎样才能做到这一点?该命令包含'"。我尝试了不同的方法,但是没有用。这有可能吗?我想念什么吗?


5
为了避免引用地狱,在这种情况下只定义一个函数可能会更容易。
nohillside

1
无论如何,@ nohillside函数通常更有用/更强大
D. Ben Knoble

1
aliasname() { free | awk '/^Mem/ { printf("free: %.2f %\n", $4/$2 * 100.0) }'; }-仍然只有一行,根本不需要对引用/转义/等进行任何更改。Freenode #bash频道的!alias事实是有原因的(嗯,,但是在大多数事实生活中是它的某种变体):如果必须询问,请改用函数
查尔斯·达菲

Answers:


8

你需要:

alias aliasname="free | awk '/^Mem/ { printf(\"free: %.2f %\n\", \$4/\$2 * 100.0) }'"

请注意,您需要同时退出"$


17

说别名的语法alias aliasname='command'有点误导,因为这似乎暗示单引号是语法的一部分。他们不是。等号后的部分类似于变量赋值,因为它可以是任何包含纯字符(不带引号)或带引号的字符串或组合的外壳单词

这些都是有效的,最后三个等效项:

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) }'
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.