For

帶有引用條目的 For 循環

  • December 1, 2016

遍歷引用標題列表的 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

不過,如果您有任何更優雅的解決方案,請分享。

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