`構文エラー:配列を作成するとき "("予期しない`)

`構文エラー:配列を作成するとき "("予期しない`)

2つの(Debian)Linuxサーバーがあります。シェルスクリプトを作成しています。

最初は配列を作成しました。

#!/bin/bash
target_array=(
    "/home/user/direct/filename -p123 -r"
)

良い結果。ただし、別のサーバーで実行すると、次の結果が表示されます。

Syntax error: "(" unexpected

私が知っている限り、両方のサーバーは同じです。なぜこれがうまくいかないのかを説明できる人はいますか?

端末に直接入力しても大丈夫ですか?


私がこれを実行すると

sh scriptname.sh

エラーが発生しますが、実行すると

./scriptname.sh

問題ないようです。違いは何ですか?

答え1

使用すると、最初の行に一緒に適用され./scriptname.shます。ただし、使用すると代わりに実行されます。/bin/bash#!sh scriptname.shshbash

シェルにはsh配列を生成する構文はありませんが、Bashにはユーザーが使用する構文があります。

答え2

runは./scriptname.shファイルの最初の行を読み取り、 "/bin/bash"を実行する必要があることを確認し、スクリプトの残りの部分をインタプリタに渡しますが、実行はファイルをsh scriptname.shユーザーの標準シェル(Ashなど)に渡します。 )やその他のインタプリタは、Bashのように配列をサポートしていません。

答え3

withを使用するとsh scriptname.sh実行中ですが、sh必ずしも使用するわけではありませんbashsh --version両方のコンピュータで比較してみてください。および/またはdpkg -S $(which sh)

関連情報