【问题标题】:zsh for loop over command outputzsh for 循环命令输出
【发布时间】:2021-05-11 08:39:12
【问题描述】:

我这样存储命令的输出。

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

我该怎么办?

【问题讨论】:

    标签: zsh


    【解决方案1】:
    % 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
    %
    
    • $(...) 与反引号的作用相同,但由于它可以嵌套而被首选,而反引号不能。
    • "$(...)" 确保保留换行符。
    • ${foo//bar} 从参数 $foo 中删除与模式 bar 匹配的所有子字符串。
    • &lt;-&gt; 匹配任何数字。
    • print -l 将每个参数打印在单独的行上。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-25
      • 1970-01-01
      相关资源
      最近更新 更多