我正在尝试使用bash和数组。但是执行示例脚本时,我收到了意外的语法错误消息:example.sh: 3: example.sh: Syntax error: "(" unexpected
。这是脚本
#!/bin/bash
array=( one two three )
如果我使用./example.sh运行该脚本,则它可以正常工作并且不会显示任何错误。但是,如果我运行sh example.sh
,我会收到错误消息。
我认为这两个命令是相同的:
所以......两者之间有什么区别?
答案 0 :(得分:3)
当您通过./example.sh
启动它时,脚本第一行中指定的命令将用于解释内容。所以你的脚本在bash
中执行,其中数组允许这样的语法。
当您通过sh example.sh
启动它时,sh
是用于解释文件内容的命令。 sh
是原始的Unix shell(又名Bourne shell),这个shell比bash
(Bourne再次shell)更粗鲁。你没有这样的阵列。请注意,在sh
中,脚本的第一行只是被解释为注释。
答案 1 :(得分:3)
使用sh example.sh - 您正在指定要用于该脚本的shell解释器。例如“bash example.sh”而不是“sh example.sh”等等。
以这种方式运行脚本会忽略您在脚本中指定的“shebang(#!/ bin / bash)”。既然你写了一个bash脚本但是试图将其作为“sh”运行,这就是它失败的原因
使用./example.sh, - 您指定从当前目录运行脚本。这将尝试在您当前所在的任何shell中运行脚本,除非指定了shebang。因为你有一个“shebang”指定在bash中运行脚本......这就是它工作的原因。
答案 2 :(得分:2)
array_name=(value1 ... valuen)
这是仅在bash
中初始化数组的方法。执行./example.sh
时,shebang行#!/bin/bash
告诉系统使用bash
执行。
但是,当您执行sh example.sh
时,sh
用于执行。在许多Unix系统(如Linux)中,sh
等同于bash
。似乎sh
是您系统上不同的shell。