一个 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"
正如它应该。
有办法解决这个问题吗?它类似于这个帖子包含带有空格的文件列表,但我不处理文件,我想将它们保留在一行上,因为会有很多条目。
答案1
另一种方法是更改字段分隔符变量,例如:
headers="header,header 2"
IFS=,
for h in $headers; do
echo $h
done
笔记:如果您有其他需要默认 IFS 值的循环,您可以首先将 IFS 值保存到临时变量中。
另请参阅man bash
并搜索IFS
更多信息。
答案2
我意识到解决这个问题的方法是使用逗号(或其他东西)而不是引号,并采用 csv 样式。现在它是一个简单的转换为行分隔。
headers="header,header 2"
headers=$(echo $headers | sed 's/,/\n/g')
printf "$headers\n" | while read h; do
echo $h
done
不过,如果您有任何更优雅的解决方案,请分享。