For
帶有引用條目的 For 循環
遍歷引用標題列表的 for 循環:
for h in "header" "header 2"; do echo $h done
返回
header header 2
我想在其他地方引用標題來清理它,比如將它們分配給一個變數。
headers='"header" "header 2"' for h in $headers; do echo $h done
但這會返回
"header" "header 2"
正如它應該。
有沒有辦法解決這個問題?它類似於這篇文章,其中包含帶有空格的文件列表,但我不做文件,我想將它們保持在一行,因為會有很多條目。
另一種方法是更改欄位分隔符變數,例如:
headers="header,header 2" IFS=, for h in $headers; do echo $h done
**注意:**如果您有其他需要預設 IFS 值的循環,您可以先將 IFS 值保存到臨時變數中。
另請參閱
man bash
並蒐索IFS
更多資訊。
我意識到解決這個問題的一種方法是使用逗號(或其他東西)而不是引號,並採用 csv 樣式。現在它是一個簡單的轉換為行分隔的。
headers="header,header 2" headers=$(echo $headers | sed 's/,/\n/g') printf "$headers\n" | while read h; do echo $h done
不過,如果您有任何更優雅的解決方案,請分享。