Bash 中的多个字符串比较

Bash 中的多个字符串比较
    ROOTPATH="/path/here"
    p1 = "file1"
    p2 = "file2"

    for file in `find $ROOTPATH type f`; do
    if [["$file" =~ $p1]]; then
      echo 'got p1'
    elif [["$file" =~ $p2]]; then
      echo 'got p1'
    else

    echo 'got nothing'

失败了,我不知道为什么。 和$p1都是$p2字符串,文件也是字符串。

我试图对 (2) 个字符串进行比较,看看是否$p1p2存在于$file两个单独的条件中。

我究竟做错了什么?

答案1

您缺少使用 的find“按类型搜索”运算符所需的语法:

for file in $(find "$ROOTPATH" -type f); do

您对p1p2变量的分配在语法上不正确:

p1="file1"    # Assigns the value 'file1' to the variable p1
p1 = "file1"  # Attempts to execute `p1` with arguments '=' and 'file1'

此外,这两个echo语句是相同的,您可能需要echo根据您的用例更改第二种情况的命令。

此外,你的陈述的语法if是有缺陷的;[[和标记之前和之后都需要空白字符或命令分隔符]]

答案2

只是修复语法

ROOTPATH="/path/here"
p1="file1"
p2="file2"

for file in `find $ROOTPATH -type f`; 
do
    if [[ $file =~ $p1 ]]; 
    then
        echo "got p1"
    elif [[ $file =~ $p2 ]]; 
    then
        echo "got p2"
    else
        echo "got nothing"
    fi
done

安排

  • 删除变量赋值中的空格
  • -type代替type
  • 由于使用而"在变量中删除$file[[
  • 添加了空格 ( [[ $file& p1 ]])
  • 添加fidone终止

正如评论中所评论的,请注意使用find命令循环。

相关内容