我有两台(Debian)Linux 服务器。我正在创建一个 shell 脚本。
在第一个上,我创建了一个数组:
#!/bin/bash
target_array=(
"/home/user/direct/filename -p123 -r"
)
效果很好。但是当我在另一台服务器上运行它时,我得到:
Syntax error: "(" unexpected
据我所知,两台服务器是相同的。谁能解释一下为什么这不起作用?
如果我直接在终端中输入它就可以了?
看来当我运行它时
sh scriptname.sh
我收到错误,但如果我运行它
./scriptname.sh
看来没问题。有什么不同?
答案1
当您使用它时,./scriptname.sh
它会/bin/bash
在第一行中执行 with #!
。但当你使用sh scriptname.sh
它时,它会执行sh
,而不是bash
。
shellsh
没有创建数组的语法,但 Bash 有您使用的语法。
答案2
运行./scriptname.sh
将导致读取文件的第一行,并发现它需要运行“/bin/bash”并将脚本的其余部分传递给解释器,而执行sh scriptname.sh
会将文件传递给用户的标准 shell(例如 Ash)并且其他解释器不像 Bash 那样支持数组。
答案3
with sh scriptname.sh
,你正在运行它sh
,而不一定是with bash
。尝试sh --version
在两台机器上进行比较。和/或与dpkg -S $(which sh)
.