在字符串项中循环新行

在字符串项中循环新行

如果我运行这个:

abc="one
two
three"
for item in "$abc"; do echo "Item: $item"; done

我得到:

item: one
two
three

但我期待的是:

Item: one
Item: two
Item: three

我究竟做错了什么?

答案1

您正在传递引用的变量,这意味着它将被视为单个参数。如果您只是不加引号,您将得到您期望的输出(请注意这可能会导致各种其他问题):

$ for item in $abc; do echo "Item: $item"; done
Item: one
Item: two
Item: three

但是,当您想要的是值列表时为什么要使用字符串呢?这就是数组的用途(假设您使用的是 bash):

$ abc=(one two three)
$ for item in "${abc[@]}"; do echo "Item: $item"; done
Item: one
Item: two
Item: three

或者,如果您不使用可以理解数组的 shell,请执行以下操作:

$ abc="one           
two
three"
$ printf '%s\n' "$abc" | while read -r item; do echo "Item: $item"; done
Item: one
Item: two
Item: three

答案2

只需删除””对于变量 $abc 来扩展它所保存的内容。双引号它将删除空白中的新行

$ abc="one                                     
two
three"


$ for item in $abc; do echo "Item: $item"; done
Item: one
Item: two
Item: three

相关内容