ZSH 迭代包含空格的字符串数组

ZSH 迭代包含空格的字符串数组

我正在尝试编写一个 ZSH 脚本,它将遍历一系列包含空格的字符串。

首先,我将set -A数组:

set -A a "this is" "a test" "of the" "emergency broadcast system"

从这里开始,我将尝试使用基本循环对其进行迭代for,并确保将数组括在引号中以处理空格:

for i in "$a"; do echo "${a[$i]}"

但是,这会引发以下错误:

zsh: bad math expression: operator expected at `is a test ...'

我已经研究这个问题一段时间了,甚至尝试将分隔符设置为“\n”,因为我认为问题是数组使用空格作为分隔符,但即使这样做:

a=(IFS=$'\n';"this is" "a test" "of the" "emergency broadcast system")

其次是:

for i in "$a"; do echo "${a[$i]}"; done

产生相同的 ZSH 错误。

答案1

这与 无关$IFS。你只是语法错误。

这是通常在 中迭代数组的方式zsh

% arr=( 'this is' 'a test' 'of the' 'emergency broadcast system' )
% for str in "$arr[@]"; do print -- $str; done
this is
a test
of the
emergency broadcast system
%

或者,如果您实际上需要迭代数组索引,那么您可以这样做:

% for (( i = 1; i <= $#arr[@]; i++ )) do; print -- $arr[i]; done

或者像这样:

% for i in {1..$#arr[@]} do; print -- $arr[i]; done

当然,如果您只是想将数组的元素打印为垂直列表,那么您根本不需要使用循环:

% print -l -- "$arr[@]"
this is
a test
of the
emergency broadcast system
%

相关内容