Concatenating string read from file with string literals creates jumbled output
我的问题是结果是混乱的。 考虑这个脚本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #!/bin/bash INPUT="filelist.txt" i=0; while read label do i=$[$i+1] echo"HELLO${label}WORLD" done <<< $'1 2 3 4' i=0; while read label do i=$[$i+1] echo"HELLO${label}WORLD" done <"$INPUT" |
Filelist.txt中
1 2 3 4 5 | 5 8 15 67 ... |
第一个循环,具有立即输入(通过我认为称为herestring(
1 2 3 4 | HELLO1WORLD HELLO2WORLD HELLO3WORLD HELLO4WORLD |
从文件读取的第二个循环给出以下混乱输出:
1 2 3 4 | WORLD5 WORLD8 WORLD15 WORLD67 |
我试过
如何在bash中连接字符串
Bash变量连接|
shell脚本中的concat字符串
好吧,正当我即将发布帖子时,解决方案击中了我。 在这里共享,所以其他人可以找到它 - 我花了3个小时来调试它(尽管几乎所有时间都在SO上)所以我看到了解决这个特定(常见)用例的价值。
问题是
我在这里用答案在消费之前转换文件。 使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #!/bin/bash INPUTFILE="filelist.txt" INPUT=$(perl -pe 's/ | | / /g'"$INPUTFILE") i=0; while read label do i=$[$i+1] echo"HELLO${label}WORLD" done <<< $'INPUT' |
在Bash中以不同的形式询问了问题:从某些文件读取时,连接字符串失败