带注释的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