Bash

如何使用包含“和”的命令創建別名

  • December 30, 2018

前幾篇文章有人問如何以百分比顯示記憶體。有人回复:

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

我想知道是否可以將此命令轉換為 ~/.bashrc 中的別名。但是別名的語法是:

alias aliasname='command'

我怎樣才能做到這一點?該命令同時包含'"。我嘗試了不同的方法,但沒有奏效。這甚至可能嗎?我錯過了什麼嗎?

你需要:

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

請注意,您需要同時轉義"$

說別名的語法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) }'
}

引用自:https://unix.stackexchange.com/questions/491452