我理解在SO中多次询问类似的问题。但是,我在这里找不到任何常见的嫌疑人。
#!/bin/bash
myvar="test"
if [ "$myvar" == "test" ]
then
echo "Test mode"
fi
花了不少时间。任何人都可以建议我错过了什么?
我能够执行脚本,但无法获取相同的源。
源bash: test.sh: line 7: syntax error: unexpected end of file
时出错
$ which bash
/bin/bash
$ bash --version
3.2.57(1)
我可以在另一台Mac上运行相同的工作。所以,我的Mac上出现了一些错误,但无法弄清楚它是什么。此外,不仅上面提到的脚本,任何具有“if”条件的脚本我都无法获取。试过提到here的不同例子,语法错误相同。
EDIT1
$ file test.sh
test.sh: Bourne-Again shell script text executable, ASCII text
Aaditi:
$ hexdump -C test.sh
00000000 23 21 2f 62 69 6e 2f 62 61 73 68 0a 6d 79 76 61 |#!/bin/bash.myva|
00000010 72 3d 22 74 65 73 74 22 0a 69 66 20 5b 20 22 24 |r="test".if [ "$|
00000020 6d 79 76 61 72 22 20 3d 3d 20 22 74 65 73 74 22 |myvar" == "test"|
00000030 20 5d 0a 74 68 65 6e 0a 65 63 68 6f 20 22 54 65 | ].then.echo "Te|
00000040 73 74 20 6d 6f 64 65 22 0a 66 69 0a |st mode".fi.|
0000004c
检查换行符字符差异或编码页面。如果它像这样简单并且涉及到mac,请始终先检查它
正如其他用户已经说过的那样,您可以检查换行是否为LF,因为CRLF将在linux中失败。如果您转换脚本,它应该是固定的。你可以安装一个可以将CRLF转换为LF的工具:
dos2unix test.sh
关于采购,不确定这是否可以帮助您解决问题。假设没有从bash调用源代码test.sh的包装器脚本...
#!/bin/sh
. ./test.sh
... if语句将失败,因为bourne shell不支持'=='但是如果你将它改为...
#!/bin/bash
myvar="test"
if [ "$myvar" = "test" ]
...脚本将无误地获取。请注意,这取决于脚本的来源,可能会忽略shebang
好的,最后发现了这个问题。
我删除了我的.bashrc文件,工作正常。看起来像.bashrc中的东西搞砸了。
$ source test.sh
Test mode
谢谢,大家都很感激。