bash - zsh 像 bash 一样迭代

标签 bash zsh

我最近从 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/

相关文章:

zsh - 通过通配符过滤 zsh 数组

linux - 在 zsh 中按模式拆分

linux - 使用 cron 运行脚本的正确方法?

python - 使用 bash 脚本将实时输出发布到 Slack

linux - bash:命令在终端中工作,而不是在脚本中工作

bash - 自动检测 shell 脚本中可能的参数以完成

Cygwin bash.exe 无法运行 make,但可以在 cmd.exe 中运行

linux - 文件计数程序是 shell 不太工作

zsh - zsh 可以像 vim 的搜索一样进行智能大小写补全吗?

docker-compose 在 Ubuntu WSL 2 上找不到环境变量 $PWD