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) 个字符串进行比较,看看是否$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'
此外,这两个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
命令循环。