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)文字列を比較して、2つの別々の条件に存在することを確認しよ$p1うとしています。p2$file

私は何が間違っていましたか?

答え1

「タイプ別検索」演算子を使用するためにfind必要な構文がありません。

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

p1そして変数への割り当てはp2構文上正しくありません。

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

また、両方のステートメントは同じであるため、ユースケースに応じて2番目のケースのコマンドを変更する必要が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[[
  • 追加されたスペース([[ $filep1 ]]
  • 追加fidone終了

コメントに記載されているように、findコマンドループの使用に注意してください。

関連情報