Bash
理解“詞擴展”?
我在這裡遇到了“單詞擴展”一詞:
保留所有其他單詞擴展(
$non_exported_shell_variable
,$1
,$#
,${HOME+x}
,$((1 + 1))
,$(cmd)...)
不變我會說我知道什麼是擴展變數,
${HOME}
但什麼是“單詞擴展”?也許它是“分詞”的替代術語(它本身就是“欄位拆分”的替代術語)。
更新
由於連結答案的壽命和認知偏差,而第一次閱讀它(主要或僅僅是因為缺乏關於其中提到的許多概念的知識),我沒有內化其中的註釋,內容如下:
在此上下文中的詞擴展是指參數擴展、算術擴展和命令替換。這不包括文件名生成(又名萬用字元或路徑名擴展)、波浪號擴展或大括號擴展(本身不是標準
sh
功能)。在此處使用 here-document 可確保s 保持不變'
,"
但請注意仍然存在反斜杠處理。
“單詞擴展”(注意複數)在POSIX中有詳細定義;他們是
- 波形擴展 (
~
)- 參數擴展 (
${}
)- 命令替換 (
$()
)- 算術展開 (
$(())
)- 路徑名擴展
“詞擴展”是上述所有內容的應用,結合其他幾個 shell 解析功能,按特定順序:
- 波浪號擴展、參數擴展、命令替換、算術擴展
- 場分裂
- 路徑名擴展
- 報價刪除
請參閱上面連結的 POSIX 規範,它詳盡地詳細說明了所有這些。