我使用 Notepad++ 并输入:
read s
echo "$s"
输出为:
然后我尝试添加分号:
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) 格式
它可以更快。