为什么以下......
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)