Bash
定義別名時使用單引號還是雙引號?
我知道雙引號的內容被擴展了,而單引號的內容沒有,這樣
echo '$1'
給
$1
然而
echo "$1"
給
<the argument - blank in this particular example>
一樣
echo $1
但是,問題Bash: How to create an alias in .bashrc for awk with parameters讓我想知道為什麼在聲明別名時使用雙引號而不是單引號,因此:
alias cutf="_cutf"
代替
alias cutf='_cutf'
我會像後一個例子一樣使用單引號。網路上的大多數範例也使用單一的,除非需要一些擴展。但是,在這種情況下,在我看來,沒有明顯的擴展。在這種情況下,它們是可以互換的,還是因為使用了函式定義而需要雙引號?
在您提到的範例中,別名的擴展是一個不包含任何可擴展字元的單詞,那麼引用名稱的方式沒有區別
_cutf
:$ alias cutf="_cutf" $ alias cutf alias cutf='_cutf' $ unalias cutf $ alias cutf='_cutf' $ alias cutf alias cutf='_cutf' $ unalias cutf $ alias cutf=_cutf $ alias cutf alias cutf='_cutf'
正如您在該互動中看到的那樣,
cutf
每次呼叫別名的值都會給出相同的結果。所以,是的,引用風格在這裡可以互換。擴展與函式名無關:至少對於 bash,別名執行簡單的文本替換(對我來說,定義別名的方式並不明顯;直接呼叫底層函式似乎同樣容易) .
這是對標題提出的問題(將我帶到這裡)的回答,而不是對 OP 的特定問題的回答。
單引號是動態評估的:
alias QS='echo $PWD'
雙引號在創建時進行評估,此後永遠不會更改:
alias QD="echo $PWD"
在 bash、zsh 和我猜的其他 shell 中發現了相同的行為。