作为输入,我有一个名为exp_multiple_512_0的文件,其中包含11行包含数字。我正在使用zsh。
如果我这样做:
echo $(cut -f1 exp_multiple_512_0)
我有:
0 100 200 300 400 500 600 700 800 900 1000
但是,如果我改变我的行:
v=$(cut -f1 exp_multiple_512_0)
echo $v
我有:
0
100
200
300
400
500
600
700
800
900
1000
但是当我使用bash时,我仍然得到:0 100 200 300 400 500 600 700 800 900 1000
我的问题是:
答案 0 :(得分:1)
在echo中使用引号:
echo "$(cut -f1 exp_multiple_512_0)"
或简单地说:
cut -f1 exp_multiple_512_0
然后,当您进入第二个命令时,您将获得换行符。
没有shell周围的引号为换行符打印空间。
答案 1 :(得分:0)
最佳答案来自chepnet,他在评论中说:
zsh不会对参数扩展执行分词 默认值,意味着任何嵌入的换行符都是字面上的 作为单词分隔的空白。 setopt SH_WORD_SPLIT生成zsh 表现得像bash。问题在于echo $ v vs echo" $ v"而不是 $(削减......)。
答案 2 :(得分:-1)
如前所述@chepner,zsh的行为方式与bash不同。
尝试在不更改zsh行为的情况下使您的解决方案同时适用于zsh和bash。试一试,将echo $v
更改为:
echo "$v" | tr '\n' ' '