小编EMP*_*tor的帖子

为什么在对C风格字符串的内容进行循环时,bash会忽略换行符?

为什么以下......

c=0; for i in $'1\n2\n3\n4'; do echo iteration $c :$i:; c=$[c+1]; done
Run Code Online (Sandbox Code Playgroud)

打印...

iteration 0 :1 2 3 4:
Run Code Online (Sandbox Code Playgroud)

并不是

iteration 0 :1:
iteration 1 :2:
iteration 2 :3:
iteration 3 :4:
Run Code Online (Sandbox Code Playgroud)

根据我的理解,$'STRING'语法应该允许我指定一个带转义字符的字符串.不应该将"\n"解释为换行符,以便for循环回声四次,每行一次?相反,似乎新行被解释为空格字符.

我采取了放松的建议并尝试设置$ IFS.结果是一样的.

IFS=$'\n'; c=0; for i in $'1\n2\n3\n4'; do echo iteration $c :$i:; c=$[c+1]; done; unset IFS;

iteration 0 :1 2 3 4:
Run Code Online (Sandbox Code Playgroud)

William Purssel在一篇评论中表示这不起作用,因为IFS被设置为换行符...但是后续行动无效.

IFS=' '; c=0; for i in '1 2 3 4'; do echo iteration $c :$i:; c=$[c+1]; done; unset IFS;

iteration 0 …
Run Code Online (Sandbox Code Playgroud)

bash scripting for-loop escaping

5
推荐指数
2
解决办法
9737
查看次数

标签 统计

bash ×1

escaping ×1

for-loop ×1

scripting ×1