zsh中的IFS与bash的行为不同
发布时间:2020-12-13 22:44:44 所属栏目:Linux 来源:网络整理
导读:foo() { local lines=$(ls -l) local IFS=$'n' for line in $lines; do echo $line done} 在zsh中,循环只执行一次,因为ls -l命令的输出不会被新行拆分,整个文本块会传递到$line. 但是在bash中,按预期工作.我怎样才能在两个shell中都有完全相同的行为? 我不
foo() { local lines=$(ls -l) local IFS=$'n' for line in $lines; do echo $line done } 在zsh中,循环只执行一次,因为ls -l命令的输出不会被新行拆分,整个文本块会传递到$line. 我不是在寻找一种循环“ls”输出的替代解决方案.试着理解为什么它不能在zsh中工作但在bash中工作得很好.而不是“ls”命令可以是其他任何东西.例如“ps -a”.行为是一样的.输出不是逐行分割的. 谢谢! 解决方法
默认情况下,ZSH不会拆分单词(与其他shell一样):
foo() { local lines=$(ls -l) local IFS=$'n' if [ $ZSH_VERSION ]; then setopt sh_word_split fi for line in $lines; do echo line: $line done } foo 积分用his answer转到@ chris-johnsen.我支持他的论点以更好地使用数组(如果可能): local lines=("$(ls -l)") 其他选项是(仅限ZSH): > local lines =(“${(f)$(ls -l)}”),其中 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |