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

IGG*_*GGt 48 bash array shell-script

我有两台(Debian)Linux 服务器。我正在创建一个shell脚本。

在第一个上,我创建了一个数组:

#!/bin/bash
target_array=(
    "/home/user/direct/filename -p123 -r"
)
Run Code Online (Sandbox Code Playgroud)

这很好用。但是当我在另一台服务器上运行它时,我得到:

Syntax error: "(" unexpected
Run Code Online (Sandbox Code Playgroud)

据我所知,两台服务器都是一样的。任何人都可以解释为什么这不起作用?

如果我直接在终端中输入它就可以了??


看起来当我运行它时

sh scriptname.sh
Run Code Online (Sandbox Code Playgroud)

我收到错误,但如果我运行它

./scriptname.sh
Run Code Online (Sandbox Code Playgroud)

好像没问题。有什么不同?

Kon*_*nko 81

当您使用./scriptname.sh它时,它会/bin/bash在第一行以#!. 但是当你使用sh scriptname.sh它时,它会执行sh,而不是bash

sh外壳有没有语法创建数组,但Bash有你所使用的语法。

  • sh 语言没有数组(`a[index]=x` 或 `a=(xy)`)。一些 sh ​​解释器支持数组,只有 ksh88(未移植到 Linux AFAIK)和一些较旧的 pdksh 变体支持 `a[index]=value` 而不是 `a=(xy)`。在 Debian 上,`sh` 通常是不支持数组的 `dash`(`a[index]=x` 不起作用)。 (3认同)