Bash

如何正確轉義單引號創建別名

  • February 28, 2015

我已經獲得了這一單線,以了解我的程序消耗了多少記憶體。

$ ps -u $USER -o pid,rss,command | \
   awk '{print $0}{sum+=$2} END {print "Total", sum/1024, "MB"}'

現在我想為該命令創建一個別名,但在轉義'字元時遇到問題:

$ alias mm=ps -u $USER -o pid,rss,command | \
   awk '{print $0}{sum+=$2} END {print "Total", sum/1024, "MB"}'
bash: alias: -u: not found
bash: alias: myuser: not found
bash: alias: -o: not found
bash: alias: pid,rss,command: not found
Total 0 MB

我試圖轉義單引號,但它仍然不起作用。

$ alias mm='ps -u $USER -o pid,rss,command | \
   awk \'{print $0}{sum+=$2} END {print "Total", sum/1024, "MB"}\''
> 

你能幫我理解如何創建這個別名嗎?

要使其成為可能的別名,您需要在別名的整個值周圍使用雙引號。結果,您還需要轉義別名中的一些內容,並且您需要轉義任何欄位參數,awk因為當您設置別名時,這些參數也會被 Bash 解釋為參數。

這對我有用:

$ alias mm="ps -u $USER -o pid,rss,command | \
   awk '{print \$0}{sum+=\$2} END {print \"Total\", sum/1024, \"MB\"}'"

在上面我做了以下事情:

  1. 別名值周圍的雙引號
alias mm="ps -u ...."
  1. 轉義 awk 的雙引號
awk '{print \$0}{sum+=\$2} END {print \"Total\", sum/1024, \"MB\"}
  1. 轉義 awk 的欄位
awk '{print \$0}{sum+=\$2} END

我會用這個嗎?

可能不會,我會將其切換為 Bash 函式,因為它會更容易維護和理解正在發生的事情,但如果你仍然想要它,這裡是別名。

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