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
[[
- 追加されたスペース(
[[ $file
&p1 ]]
) - 追加
fi
とdone
終了
コメントに記載されているように、find
コマンドループの使用に注意してください。