web-dev-qa-db-ja.com

Bashスクリプトエラー:「関数:見つかりません」。なぜこれが表示されますか?

Ubuntuマシンでbash scriptを実行しようとしていますが、エラーが発生しています:

関数が見つかりません

テストのために、ラップトップでは正常に機能するがデスクトップでは機能しない次のスクリプトを作成しました。理由についてのアイデアはありますか?それが関連する場合、私のラップトップはMacです。

#!/bin/bash

function sayIt {   
   echo "hello world"
}

sayIt

これは私のラップトップでは「hello world」を返しますが、デスクトップでは次のように返します:

run.sh:3:関数が見つかりませんhello world run.sh:5:構文エラー: "}"予期しない

63
E T

デスクトップでは、bashではなくdashまたはfunctionキーワードを認識しない他のPOSIX準拠のシェルで実際に実行している可能性があります。 functionキーワードは、bashism、bash拡張です。 POSIX構文はfunctionを使用せず、括弧の使用を義務付けています。

$ more a.sh
#!/bin/sh

function sayIt {   
   echo "hello world"
}

sayIt
$ bash a.sh
hello world
$ dash a.sh
a.sh: 3: function: not found
hello world
a.sh: 5: Syntax error: "}" unexpected

POSIX構文は次の両方で機能します。

$ more b.sh
#!/bin/sh

sayIt () {   
   echo "hello world"
}

sayIt
$ bash b.sh
hello world
$ dash b.sh
hello world
115
Ned Deily

私は同じ問題に直面し、構文を修正しました。 削除キーワードfunctionおよびadd- 括弧()関数名の後に。

#!/bin/bash

sayIt()
{   
   echo "hello world"
}

sayIt
11
Prateek Joshi

ls -la/bin/sh

bashまたはdashを指すsymリンクを確認します

3
Juda Barnes