如何在 zsh 中迭代间隔字符串对数组?

如何在 zsh 中迭代间隔字符串对数组?

我正在读这篇文章这里并尝试了解决方案。

但是,下面没有产生任何输出。我遗漏了什么?

arr=( '102 351' '576 324' '427 321' )
for str in "$arr[@]";                                                                                                                                                                                  ✔ 
do ./findgcd $str | cat >> output;
done;

output文件保持为空但没有看到错误。

答案1

与其他一些 shell 不同,zsh它不会自动根据空格拆分变量,因此findgcd调用时会传递单个字符串。showArgs下面脚本中的函数演示了会发生什么以及如何使用扩展强制拆分单词$=

#!/usr/bin/env zsh

showArgs() {
    printf -- '%-9s:' "${1}"
    shift
    printf ' "%s"' "$@"
    print
}

arr=( '102 351' '576 324' '427 321' )
for str in "$arr[@]"; do
    showArgs 'No split' ${str}
    showArgs 'Split' ${=str}
    # ./findgcd ${=str} >> output
    findgcd ${=str}
    print
done

输出:

No split : "102 351"
Split    : "102" "351"
3

No split : "576 324"
Split    : "576" "324"
36

No split : "427 321"
Split    : "427" "321"
1

将数组按对处理的另一个方法是zsh

arr=(
  102 351
  576 324
  427 321
)
for a b in $arr; do
    showArgs 'pairs' $a $b
    findgcd $a $b
done

输出:

pairs    : "102" "351"
3
pairs    : "576" "324"
36
pairs    : "427" "321"
1

相关内容