2つの(Debian)Linuxサーバーがあります。シェルスクリプトを作成しています。
最初のもので私はこうして配列を作成します:
#!/bin/bash
target_array=(
"/home/user/direct/filename -p123 -r"
)
それはうまくいきます。しかし、他のサーバーでこれを実行すると、次のようになります。
Syntax error: "(" unexpected
私が知る限り、両方のサーバーは同じです。なぜこれが機能しないのかについて誰かが光を当てることはできますか?
端末に直接入力すると問題ありませんか?
私がそれを実行すると、
sh scriptname.sh
エラーが表示されますが、次のように実行すると
./scriptname.sh
大丈夫のようです。違いは何ですか?
./scriptname.sh
を使用すると、/bin/bash
の最初の行と同様に、#!
で実行されます。ただし、sh scriptname.sh
を使用すると、sh
ではなくbash
が実行されます。
sh
Shellには配列を作成する構文はありませんが、Bashには使用した構文があります。
./scriptname.sh
を実行すると、ファイルの最初の行が読み取られ、「/ bin/bash」を実行して残りのスクリプトをインタープリターに渡す必要があることがわかります。sh scriptname.sh
を実行すると、ユーザーの標準シェル(Ashなど)にファイルを追加し、他のインタープリターがBashのように配列をサポートしていない場合があります。
_sh scriptname.sh
_では、必ずしもsh
ではなくbash
で実行しています。両方のマシンで_sh --version
_を比較してみてください。またはdpkg -S $(which sh)
を使用します。