Bash

定義別名時使用單引號還是雙引號?

  • January 6, 2018

我知道雙引號的內容被擴展了,而單引號的內容沒有,這樣

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 中發現了相同的行為。

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