如何使用for
循环逐行阅读?
我尝试了什么:
hh=$(echo -e "\n1\n2\n3\n4\n")
IFS=$'\n';
for r in "$hh"; do echo $r; done
1 2 3 4
echo -e "$hh"
1
2
3
4
答案 0 :(得分:4)
使用while
循环:
$ while read -r r; do echo $r; done <<< "$hh"
1
2
3
4
答案 1 :(得分:2)
正确的答案是,你不逐行读取for循环。使用while循环代替内置read
:
while IFS= read -r line; do
echo "$line"
done <<< "$hh"
答案 2 :(得分:0)
虽然使用while read
肯定可以解决这个问题,但如果你真的想使用for loop
,那么你需要使用IFS=$'\n'
来读取bash's for loop
中的输入字符串:
hh=$(echo -e "\nname n1\nval n2\n3\nfoo n4\n")
IFS=$'\n' && for r in $hh; do echo "r='$r'"; done
r='name n1'
r='val n2'
r='3'
r='foo n4'
答案 3 :(得分:0)
从$hh
左右删除引号,原始代码正常工作:
hh=$(echo -e "\n1\n2\n3\n4\n")
IFS=$'\n'
for r in $hh; do echo "Value: $r"; done
# output:
Value: 1
Value: 2
Value: 3
Value: 4
答案 4 :(得分:-1)
这只是for循环中$ hh变量的扩展,不需要引用。
此代码有效。
hh=$(echo -e "\n1\n2\n3\n4\n")
echo "Starting string"
echo -e "$hh"
IFS=$'\n';
echo "Original Code"
for r in "$hh"; do echo r is $r; done
echo "Fixed Code 1"
IFS=$'\n';
for r in "$hh"; do echo r is "$r"; done
echo "Fixed Code 2"
IFS=$'\n';
for r in $hh ; do echo r is $r ; done
并制作,
Starting string
1
2
3
4
Original Code
r is 1 2 3 4
Fixed Code 1
r is
1
2
3
4
Fixed Code 2
r is 1
r is 2
r is 3
r is 4