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.sh
sh
bash
シェルにはsh
配列を生成する構文はありませんが、Bashにはユーザーが使用する構文があります。
答え2
runは./scriptname.sh
ファイルの最初の行を読み取り、 "/bin/bash"を実行する必要があることを確認し、スクリプトの残りの部分をインタプリタに渡しますが、実行はファイルをsh scriptname.sh
ユーザーの標準シェル(Ashなど)に渡します。 )やその他のインタプリタは、Bashのように配列をサポートしていません。
答え3
withを使用するとsh scriptname.sh
実行中ですが、sh
必ずしも使用するわけではありませんbash
。sh --version
両方のコンピュータで比較してみてください。および/またはdpkg -S $(which sh)
。