我想使用別名來呼叫單線。
while printf '%s ' "$(df -P / | awk 'NR==2 { print $(NF-1) }')"; do sleep 30; done
我試著逃跑'
,\'
但沒有成功。
在別名中使用上述單行程式碼的正確語法是什麼?
答案1
alias my_du=$'while printf \'%s \' "$(df -P / | awk \'NR==2 { print $(NF-1) }\')"; do sleep 3; done'
您可以使用以下命令檢查結果
alias my_du
如果$()
被引用"
而不是'
or\
那麼它被替換並且結果而不是預期的程式呼叫成為別名定義的一部分。
答案2
雖然這可以被哄騙成別名,但函數通常是首選。從man bash
:
幾乎所有用途,別名都被 shell 函數取代。
函數形式的別名:
my_du() {
while printf '%s ' "$(df -P / | awk 'NR==2 { print $(NF-1) }')"
do
sleep 30
done
}
這更具可讀性,因此也更易於維護。
答案3
您無法在仍處於單引號中時轉義單引號,因為\
在單引號上下文中按字面意思理解。在轉義之前關閉單引號,或者更好的是使用雙引號。
alias my_du="while printf '%s ' \"\$(df -P / | awk 'NR==2 { print \$(NF-1) }')\"; do sleep 30; done"
答案4
如果您希望命令接受參數或以任何方式與其環境交互,請使用函數。至少在 bash 中,別名在定義時會擴展,它們可能就好像他們接受參數或使用變數一樣。有時。墨菲定律確保這在真正需要時不起作用。