我想了解如何使用diff
命令来理解这些文件之间的区别。有人可以解释一下这意味着什么吗? cases.sh
是用记事本++编写的,cases2.sh
是在windows7上用cygwin编写的。但我看不出差异,因为我认为它不可见?让case.sh工作的建议是什么,但我想了解它有什么问题。
$ diff cases.sh cases2.sh
1,13c1,13
< #!/bin/sh
< # Prompt user to enter a character
< echo "Please enter a letter:"
< read charac
< case $charac in
< "a"|"A") echo "You have typed a vowel!" ;;
< "e"|"E") echo "You have typed a vowel!" ;;
< "i"|"I") echo "You have typed a vowel!" ;;
< "o"|"O") echo "You have typed a vowel!" ;;
< "u"|"U") echo "You have typed a vowel!" ;;
< *) echo "You have typed a consonant!" ;;
< esac
< exit 0
\ No newline at end of file
---
> #!/bin/sh
> # Prompt user to enter a character
> echo "Please enter a letter:"
> read charac
> case $charac in
> "a"|"A") echo "You have typed a vowel!" ;;
> "e"|"E") echo "You have typed a vowel!" ;;
> "i"|"I") echo "You have typed a vowel!" ;;
> "o"|"O") echo "You have typed a vowel!" ;;
> "u"|"U") echo "You have typed a vowel!" ;;
> *) echo "You have typed a consonant!" ;;
> esac
> exit 0
cases.sh
不起作用,我在记事本++中写了这个,我得到下面的错误
$ ./cases.sh
Please enter a letter:
t
': not a valid identifier `charac
./cases.sh: line 5: syntax error near unexpected token `$'in\r''
'/cases.sh: line 5: `case $charac in
cases2.sh
确实有效,但是我在windows7上的cygwin中用nano写了这个。
$ ./cases2.sh
Please enter a letter:
t
You have typed a consonant!
答案 0 :(得分:1)
尝试打开&#34;显示所有字符&#34;在notepad ++中...听起来你在那里为你的默认编辑器设置设置了windows风格的换行符。将文件转换为unix样式的换行符并尝试运行它。
答案 1 :(得分:0)
您遇到了经典的换行问题。
Linux和Unices(包括像Cygwin这样的兼容性层)使用单个\n
(换行符)来终止每一行,而Windows系列则为每一行使用\r\n
(回车符,换行符)。
因此,许多(尽管不是全部)Unix实用程序会阻塞在Windows上编写的脚本,因为它们包含额外的,不可见的回车。在您的情况下,diff
知道<{em>} cases1.sh
与这些行上的cases2.sh
不同,但不会显示实际的\r
个字符造成差异。同样,bash
会被回车。
最简单的解决方案是在您选择的编辑器中启用Unix行结尾,并在您已编写的脚本上运行dos2unix
之类的工具。它应该在Cygwin的存储库中提供。