对于以下脚本:
for f in $FILES
do
fname="$(basename "${f}")"
fn="${fname:6:2}"
if [["$fn" == "01"]]; then #error here
echo "yes"
fi
done
答案1
你有一个相当简单的语法问题。只需在测试结构之前和之后添加空格,如下所示
if [[ "$fn" == "01" ]]; then ...
它应该有效。
原因是,[[
实际上是一个bash
关键词,不是操作员,因此必须“独立”放置(类似于等if
)。
您的文件之一似乎名为01
.使用您的语法,shell 会看到关键字if
,它希望后面跟着一个要计算其返回码的命令。在您的代码中,它会被认为[[01
是该命令,但显然该命令不存在。这也是您的错误消息的原因。
如果您想了解有关 shell 脚本的更多信息,并且由于您似乎正在使用bash
(或ksh
)(如使用双括号测试运算符所示),您可能需要查看重击指南(根据@terdon的建议),后来,高级 Bash 脚本编写指南(一旦您对其中有时包含的不太好的做法“坚定”)以获取深入的信息。