推 psylove5566:恩,我是要讀list中的每一個檔案,謝謝您的回覆 07/04 10:17
→ goldie:-d設定分隔字元, 本次採unix換行字元: $'\n' 07/04 21:59
→ goldie:格式一定要錢號加一對單引號,不能少$,也不能換成雙引號 07/04 22:00
→ goldie:這是 bash 特殊語法,用於展開跳脫字元 07/04 22:01
推 psylove5566:不好意思,我執行後出現以下的錯誤 07/05 16:15
→ psylove5566:syntax error near unexpected token `<' 07/05 16:16
→ psylove5566:請問,done表示while結束,為啥輸入list在done之後? 07/05 16:18
→ psylove5566:請問兩個<分開打的意思是什麼,謝謝您的回覆 07/05 16:19
→ goldie:()是subshell而<()多把subshell的stdout導出偽裝成檔案 07/05 22:20
→ goldie:再用第一個<設定while-loop的stdin來自上述的(偽)檔案 07/05 22:21
→ goldie:< <() 等效於 < input_text_file 07/05 22:23
→ goldie:所以兩個< <不能連在一起,因為是不同功能用途XDDD 07/05 22:25
→ goldie:當然你可以把這個while-loop重寫成 pipe 型式… 例如: 07/05 22:25
→ goldie:cat list1.txt | while read -r -d $'\n' line; do (…略) 07/05 22:26
→ goldie:雖然改成這樣好像比較直觀,但我覺得有時反而難用,因為… 07/05 22:27
→ goldie:原本是cat跑在subshell裡,新的反而是pipe後面的while-loop 07/05 22:31
→ goldie:跑在subshell裡,這樣我常在while-loop設定全域變數,會在 07/05 22:32
→ goldie:script其他處取用不到(parent shell)會造成有些你想做的事 07/05 22:33
→ goldie:情你達不到 07/05 22:33
→ goldie:關於<()跟>()語法,有個名詞叫 "process substitution" 07/05 22:36
→ goldie:以及 Google Shell Style Guide: 07/06 14:54
→ goldie:若兩個<少隔空白而連在一起成<<則變成here document種語法 07/06 22:27
推 psylove5566:謝謝您詳細的介紹,非常的感激 07/07 10:04