Bash関数定義の予期しないトークンの近くに構文エラーがあります。

Bash関数定義の予期しないトークンの近くに構文エラーがあります。

申し訳ありません。私はbashファイルなどについて初めて触れました。私の.bashrcのコピーは次のとおりです。

alias k='kate 2>/dev/null 1>&2 & disown'

function kk {kate 2>/dev/null 1>&2 & disown}

1行目のエイリアスは正常に機能しますが、2行目では次のエラーが発生します。

bash: /home/mozershmozer/.bashrc: line 3: syntax error near unexpected token `{kate'
bash: /home/mozershmozer/.bashrc: line 3: `function kk {kate 2>/dev/null >1>&2 & disown}'

私はLinux Mint 17.3を実行しており、これが私の.bashrcファイルにある唯一の2行です。私のコンピュータの他のほとんどすべての項目は基本的にバニラです。結局のところ、私はこの関数を試して特定のタスクを実行したかったのですが、すぐに構文の壁にぶつかりました。ここにリストされている正確な関数は、構文をより明確に学ぶのを助ける実験的なダミー関数です。

答え1

完全に特別ではありませんが、他のbashPOSIXシェルでも利用可能{}シンボル彼らは特別ですが性格この文脈で。機能定義から複合コマンドを生成するときは、それらを保存することが重要です。性格つまり、スペースで囲まれています。

このような単一行関数定義の最後のコマンドは、セミコロンで終わる必要があります。それ以外の場合は、クローズ中括弧がコマンド}の引数として扱われます。


記述子として、もし関数を別のPOSIXシェルに移植するには、別の関数構文を使用することをお勧めします。

kk () { kate 2>/dev/null 1>&2 & disown; }

の使用はfunctionのみに適用されますbashが、ここで提供される形式はbashsh、Korn、およびAlmquistシェルなどの他のシェルに適用されます。

disownまた、bashによって異なります。

答え2

複数行に入力すると追加の入力を避けることができ、;コマンドがたくさん含まれていても関数を作成する方法を提供します。

function kk {
    kate 2>/dev/null 1>&2 & disown
}

関連情報