web-dev-qa-db-ja.com

`構文エラー:配列の作成時に「("予期せぬ `」

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

最初のもので私はこうして配列を作成します:

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

それはうまくいきます。しかし、他のサーバーでこれを実行すると、次のようになります。

Syntax error: "(" unexpected

私が知る限り、両方のサーバーは同じです。なぜこれが機能しないのかについて誰かが光を当てることはできますか?

端末に直接入力すると問題ありませんか?


私がそれを実行すると、

sh scriptname.sh

エラーが表示されますが、次のように実行すると

./scriptname.sh

大丈夫のようです。違いは何ですか?

38
IGGt

./scriptname.shを使用すると、/bin/bashの最初の行と同様に、#!で実行されます。ただし、sh scriptname.shを使用すると、shではなくbashが実行されます。

sh Shellには配列を作成する構文はありませんが、Bashには使用した構文があります。

59

./scriptname.shを実行すると、ファイルの最初の行が読み取られ、「/ bin/bash」を実行して残りのスクリプトをインタープリターに渡す必要があることがわかります。sh scriptname.shを実行すると、ユーザーの標準シェル(Ashなど)にファイルを追加し、他のインタープリターがBashのように配列をサポートしていない場合があります。

0
dave_alcarin

_sh scriptname.sh_では、必ずしもshではなくbashで実行しています。両方のマシンで_sh --version_を比較してみてください。またはdpkg -S $(which sh)を使用します。

0
joepd