带注释的Shell脚本,创建变量时未找到命令

带注释的Shell脚本,创建变量时未找到命令,shell,Shell,我有下面的脚本,它可以工作: x=10 echo $x now=$(date +'%Y-%m-%d') echo $now 但是,当我在开头添加注释行时: # comment x=10 echo $x now=$(date +'%Y-%m-%d') echo $now 我得到以下信息: x=10: command not found x: undefined variable 为什么添加注释会导致脚本失败 如果我执行以下操作,它将起作用: x=10 echo $x now=$(date +

我有下面的脚本,它可以工作:

x=10
echo $x
now=$(date +'%Y-%m-%d')
echo $now
但是,当我在开头添加注释行时:

# comment
x=10
echo $x
now=$(date +'%Y-%m-%d')
echo $now
我得到以下信息:

x=10: command not found
x: undefined variable
为什么添加注释会导致脚本失败

如果我执行以下操作,它将起作用:

x=10
echo $x
now=$(date +'%Y-%m-%d')
# comment here
echo $now
这是csh的一个怪癖。(停止使用csh!)csh将使用“标准shell”(引用自csh手册页)处理不以“#”开头的脚本。当脚本以“#”开头时,csh将对其进行解析。您的脚本不是有效的csh

您可能应该添加一个shebang行以避免此类问题。也就是说,做第一行:

#!/bin/sh #!/垃圾箱/垃圾箱
试试这样的

#!/bin/sh
#
x=10
echo $x
now=$(date +'%Y-%m-%d')
echo $now

这在我的系统(Ubuntu11.0464位)上运行。如果这不起作用,那么您的文件中可能有一些隐藏的特殊字符。

该脚本是否有
#shebang作为它的第一行,或者仅仅是简单的命令?你可能在文件中有DOS风格的行结尾吗?不知道。我正在使用
vi
来编写脚本!似乎没有改变任何东西
xxd«script»
od-a«script»
将让您查找有趣的角色。另外,你发布的代码是否就是失败的代码?注释真的是
#注释
,还是其他东西?什么是csh以及如何停止使用它?@JohnB:您可以通过运行
chsh
来更改shell。什么是csh?csh是邪恶的
man csh
可能会给出一个不太偏颇的描述。csh是一个外壳。(它是解释您在命令行中键入内容的程序。)要使用不同的shell,只需调用它;例如,键入“bash”。您的脚本由shell解释,从脚本的语法来看,您似乎希望它由bourne shell解释。通过添加shebang行来明确这一点。壳有两种主要类型:伯恩壳和c壳。语法不兼容。请随意使用交互式shell<对于脚本而言,code>sh
bash
优于
cah
tcsh
,但tcsh尤其具有一些很好的交互功能。只要在脚本顶部有一个合适的shebang(
#!
),就不需要使用同一个shell来编写脚本和进行交互。当然,为了保持一致性有些话要说,但这取决于你。
#
是您问题的解决方案
chsh
与此无关。我没有
#/bin/sh