我了解类似的问题,因此已多次提出。但是,我在这里找不到任何通常的嫌疑犯。
#!/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
edit2:
$ 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
答案 0 :(得分:1)
检查换行符差异或编码页面。 如果它像这样简单并且有Mac,请务必先检查
答案 1 :(得分:0)
正如其他用户所述,您可以检查换行符是否为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可能会被忽略
答案 2 :(得分:0)
好的,终于找到了问题。
我删除了.bashrc文件并正常工作。似乎.bashrc中的某些东西弄乱了。
$ source test.sh
Test mode
谢谢大家。
答案 3 :(得分:0)
好的。 10个月后,我妻子帮我调试了这个问题。
我在.bash_profile alias fi='firebase init'
中有一个别名
别名 fi 使bash与 if 语句混淆。