Regex bash比较字符串与字符串列表

Regex bash比较字符串与字符串列表,regex,bash,Regex,Bash,假设我在bash中有以下代码: #!/bin/bash bad_fruit=( apple banana kiwi ) for fname in `ls` do # want to check if fname contains one of the bad_fruit is_bad_fruit=??? # <------- fix this line if [ is_bad_fruit ] then echo "$fname contains bad fruit

假设我在bash中有以下代码:

#!/bin/bash

bad_fruit=( apple banana kiwi )
for fname in `ls`
do
  # want to check if fname contains one of the bad_fruit
  is_bad_fruit=??? # <------- fix this line
  if [ is_bad_fruit ]
  then
    echo "$fname contains bad fruit in its name"
  else
    echo "$fname is ok"
  fi
done
#/bin/bash
坏水果=(苹果香蕉猕猴桃)
对于'ls'中的fname`
做
#要检查fname是否包含一个坏水果吗

水果坏吗 请尝试以下代码:

#!/bin/bash

bad_fruit=( apple banana kiwi )
re="$(printf '%s\n' "${bad_fruit[@]}" | paste -sd '|')"

for fname in *; do
  # want to check if fname contains one of the bad_fruit
  if [[ $fname =~ $re ]]; then
    echo "$fname contains bad fruit in its name"
  else
    echo "$fname is ok"
  fi
done
照顾

ls
是一种交互式查看文件信息的工具。它的输出是为人类格式化的,会导致脚本中出现错误。使用globs或find代替。了解原因:

另一个选项(使用带有内部循环的
grep
并评估退出代码):


*
中fname的
要比`ls`
中fname的
好得多(如果文件名包含空格)+1看起来效果不错-不知怎的,当我试图将最后一个grep的其余部分填充到布尔变量中,然后对该布尔变量使用if时,我遇到了麻烦。有什么建议吗?请给我一些例子,我不明白你的意思。is_bad_fruit=`echo“$fname”| grep&>/dev/null-E“$re”``这似乎总是正确的。你想在is_bad_fruit变量中存储什么?如果fname包含一个坏水果,则为真,如果不包含则为假
#!/bin/bash

bad_fruit=( apple banana kiwi )
for fname in *; do
  for fruit in "${bad_fruit[@]}"; do
    echo "$fruit"
  done | grep "$fname"
  if [ $? -eq 0 ]; then
    echo "$fname contains bad fruit in its name"
  else
    echo "$fname is ok"
  fi
done