Regex bash比较字符串与字符串列表
假设我在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
#!/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