一个简单的 case/esac 构造练习失败了,为什么?

Wob*_*ows -1 bash case

这是 BASH 脚本:

#!/bin/bash

read -p "Type in a color name, please: " COLOR

case "$COLOR" in
    green | red | yellow)
    echo -n "nice colors!"
    ;;
    *)
    echo -n "meh..."
    ;;
esac
Run Code Online (Sandbox Code Playgroud)

x为用户设置脚本权限后,我运行它但得到以下信息:

[inewton@centos7 LPIC1-exercises]$ ./colors.sh
Type in a color name, please: pink
./colors.sh: line 12: syntax error near unexpected token `newline'
'/colors.sh: line 12: `esac
[inewton@centos7 LPIC1-exercises]$
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?请帮帮我。

Gil*_*il' 5

'/colors.sh: line 12: `esac
Run Code Online (Sandbox Code Playgroud)

请注意结束引号在行首的奇怪位置。这表明单词后面有一个回车 (CR)字符esac。Bash 将 CR 视为单词的一部分esac?,因此这不是保留字,并且esac缺少实际的单词。

CR 字符是 Windows 行尾的一部分:Unix 行尾是单独的 LF(换行)字符,而 Windows 行尾是两个字符的序列 CR+LF。请参阅#!/bin/bash - 没有这样的文件或目录以获取更多解释。这里的扭曲是你的文件有混合的行尾:前面的行没有引起问题,所以至少其中一些必须有 Unix 行尾。

从文件中删除所有回车。大多数编辑器会在带有混合行尾的文件中明确显示它们。