如果我运行这个:
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