用于循环命令输出的zsh



我这样存储命令的输出。

all=(`some command`)
for i in $all; do
echo $i
done

这会像这样返回输出。

string1a string1b string1c
string2a string2b string2c
string3a string3b string3c

然而,我希望能够访问i值的一部分,其中空格是分隔符。例如这样的输出。

string1a string1c
string2a string2c
string3a string3c

我该怎么做?

% print -l 'string1a string1b string1c' 'string2a string2b string2c' 
'string3a string3b string3c'
string1a string1b string1c
string2a string2b string2c
string3a string3b string3c
% all=( "$( print -l 'string1a string1b string1c' 'string2a string2b string2c' 
'string3a string3b string3c' )" )
% print -l ${all//string<->b }
string1a string1c
string2a string2c
string3a string3c
%
  • $(...)与backticks的作用相同,但它是首选,因为它可以嵌套,而backticks不能
  • "$(...)"确保保留换行符
  • CCD_ 3从参数CCD_ 4移除与模式CCD_ 5匹配的所有子串
  • <->匹配任何数字
  • print -l将每个自变量打印在单独的一行上

或者,您也可以在不创建参数$all:的情况下执行此操作

% print -l ${"$(
print -l 'string1a string1b string1c' 'string2a string2b string2c' 
'string3a string3b string3c'
)"//string<->b }
string1a string1c
string2a string2c
string3a string3c
%

最新更新