為了給出背景關系,我正在嘗試創建一個簡單版本的 bash,為此我需要模仿 bash 使用多組單引號和雙引號決議內容的方式。我無法弄清楚 bash 處理引號內引號的整個程序。我注意到一些重復的模式,但仍然沒有完整的畫面。
例如這個例子:
$ "'"ls"'"
評估為:
$ 'ls'
甚至是這個更丑陋的例子:
$ "'"'"""'"ls"'"""'"'"
評估為:
$ '"""ls"""'
我注意到出現以下模式:
- 如果換行引號的數量是偶數,則它僅評估反引號內的內容
- 如果包裝引號的數量是奇數,則它會評估反引號內的內容。
例如,甚至包裝引號:
$ ""'ls'""
評估沒有單引號本身的反引號(單引號)內部的內容,評估:
$ ls
或者對于奇數的包裝引號:
$ '''"ls"'''
它包括雙引號的內容:
$ "ls" : command not found.
我仍然沒有全面了解如何完成引號內更復雜引號的決議模式。
uj5u.com熱心網友回復:
報價按順序處理,尋找匹配的結束報價。開始和結束引號之間的所有內容都變成了一個字串。嵌套引號沒有特殊含義。
"'"ls"'"
當它處理第一個"時,它會掃描尋找下一個"結束字串的,其中包含'.
然后它掃描固定字串ls。
當它處理"后ls,它掃描尋找下一個",產生另一個字串'。
這些都是串聯的,導致'ls'.
"'"'"""'"ls"'"""'"'"
"'"是字串'。
'"""'是字串"""
"ls"是字串ls
'"""'是字串"""
"'"是字串'。
將它們連接在一起產生'"""ls"""'
""'ls'""
""是一個空字串。'ls'是字串ls。""是另一個空字串。將它們連接在一起產生ls.
'''"ls"'''
''是一個空字串。'"ls"'是字串"ls"(包含文字雙引號)。''是一個空字串。連接它們產生"ls". 由于沒有具有該名稱的命令(包括文字雙引號),因此您會收到錯誤訊息。
單引號和雙引號之間存在差異,但它們不會影響您發布的任何示例。請參閱Bash 中單引號和雙引號之間的區別
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/473076.html
下一篇:替換行之間的模式
