创建数组时`语法错误:“(”意外`

创建数组时`语法错误:“(”意外`

我有两台(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).

相关内容