我最近从 bash 切换到 zsh,但不确定如何实现:
狂欢:
$ list='aaa
> bbb
> ccc
> ddd'
$ for i in $list; do echo $i-xxx; done
aaa-xxx
bbb-xxx
ccc-xxx
ddd-xxx
在 zsh 中我得到:
% list='aaa
quote> bbb
quote> ccc
quote> ddd'
% for i in $list; do echo $i-xxx; done
aaa
bbb
ccc
ddd-xxx
如何强制 zsh 以与 bash 相同的方式执行此操作?
最佳答案
大多数人肯定会考虑改用数组:
arraylist=(aaa bbb ccc ddd)
for i in "${arraylist[@]}"; do echo "$i-xxx"; done
你似乎想遍历变量中的行,所以你想这样做:
while IFS= read -r i; do echo "$i-xxx"; done <<<"$list"
如果你想在每一行后面加上 -xxx
字符串,使用 sed
代替:
sed 's/$/-xxx/' <<<"$line"
还有xargs
:
xargs -d'\n' -i echo {}-xxx <<<"$line"
如果你想遍历字符串中的单词并且单词可能在双引号内,我会使用xargs
:
xargs -i echo {}-xxx <<<"$line"
如果你想遍历字符串中的单词而不解释引号,其他答案中使用for i in $(echo $list)
的方式与两者兼容zsh 和 bash
关于bash - zsh 像 bash 一样迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64631439/