':不是有效的读取标识符

':不是有效的读取标识符

我使用 Notepad++ 并输入:

    read s
    echo "$s"

输出为:

<code>':不是有效的标识符</code>

然后我尝试添加分号:

read s;
echo "$s"

输出为:

在此处输入图片描述

我将文件另存为q.sh并使用 cygwin 运行,但仍然无法使用read运算符,所以我感到很困惑。我vi也尝试过其他编辑器,但输出是一样的。

哪里出了问题?如何修复?

答案1

组成 shell 脚本的文本文件是用 Notepad++ 编写的。该编辑器默认将文件保存为 DOS 文本文件,从 Unix 的角度来看,\r每行末尾都有一个多余的回车符 ( )。这让人感到困惑sh

要删除它:

$ tr -d '\r' <q.sh >q-new.sh
$ mv q-new.sh q.sh

剧本缺少#!-line(如评论中指出的那样),但只要您使用明确的解释器(sh q.sh)运行它,就不需要这样做。

添加行

#!/bin/sh

之后chmod +x q.sh将使以 方式运行它的行为与./q.sh使用 运行它的行为完全相同sh q.sh

答案2

如果您可以使用 Notepad++,还有另一种方法可以将回车符转换为 Unix 格式。在记事本中,依次操作:编辑 -> EOL 转换 -> Unix (LF)

在法语中,它是:版本 -> 转换为英文字母 -> 转换为 Unix (LF) 格式

它可以更快。

相关内容