Com*_*erd 6 arrays debugging bash shell command-line
在Shell编程中给出以下数组
foo =(spi spid spider spiderman bar lospia)
我想使用GREP来搜索数组中包含3个字母的所有单词 spi
正确输出:spi spi spider spiderman lospia
我尝试过这样的事情
foo=(spi spid spider spiderman)
grep "spi" foo
Run Code Online (Sandbox Code Playgroud)
但似乎这是错误的,正确的方法是什么?
moc*_*ace 12
最简单的解决方案是将数组元素传递给grep:
printf -- '%s\n' "${foo[@]}" | grep spi
Run Code Online (Sandbox Code Playgroud)
几个笔记:
printf是一个内置的bash,你可以查找它man printf.该--选项告诉printf,后面的任何内容都不是命令行选项.这样可以防止foo数组中的字符串被解释为这样.
该表示法"${foo[@]}"将数组的所有元素扩展为独立参数.总的来说,数组中的单词被放入一个多行字符串并通过管道传输到grep中,它将每个单独的行与spi匹配.
下面将打印出所有包含 spi 的单词:
foo=(spi spid spider spiderman bar)
for i in ${foo[*]}
do
    echo $i | grep "spi"
done
Run Code Online (Sandbox Code Playgroud)
        |   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           21400 次  |  
        
|   最近记录:  |