在 if 语句行出现

在 if 语句行出现

对于以下脚本:

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 脚本编写指南(一旦您对其中有时包含的不太好的做法“坚定”)以获取深入的信息。

相关内容