この関数定義とコマンドラインでこれらの特定のセミコロンが必要なのはなぜですか?

この関数定義とコマンドラインでこれらの特定のセミコロンが必要なのはなぜですか?

私はLPIC1、試験102を準備しています。この質問が私の前に現れ、私は完全にパニックになりました。初めてクイズを解く当時はこの事実を知っていましたが、一ヶ月半が過ぎた今はすべてが頭の中で曇っています。

何ですか

   function a { echo $1; } ; a a b c   
出力?

Aa

B.abc

タクシー

D.aabc

私は「script」というファイルを生成してこの機能を再現しようとしました。

function a { echo $1;
};
a a b c

保存して実行権限を付与して試してみてください。

$ bash script
a
$ 

では正解はAなのになぜそうなのでしょうか?;afterを追加する必要がありますか$1? 2番目はどのような用途;に使用されますか?誰かがこのスクリプトの構文を説明できますか?

答え1

これらのコマンドはコマンドラインから実行する必要があります。たとえば、次のようになります。
function a { echo $1; } ; a a b c

2番目のセミコロンはコマンドのリストを次
function a { echo $1; }
のように分割します。
a a b c

  • 最初のコマンドは、最初の位置引数を反映する「a」という関数を生成します。関数内のコマンドのリストは末尾の
    セミコロンで終わる必要がありますecho $1。そうする改行文字がないからです。
    (参照: man bash-> 複合コマンド -> { list; } )

  • 2番目のコマンドはa a b c関数(fist a)を呼び出し、位置引数として "ab c"を関数に渡します。

関数は最初の位置引数だけをエコーするので、正解は「A」です。

答え2

a a b c次のように翻訳command arg1 arg2 arg3

あなたがしなければならないのは、「a」であるa最初の引数()を返す関数を定義することだけです。$1

セミコロンは、中かっこを使用してそのシェルでコマンドをグループ化する方法です。

{ commandA ; commandB ; commandC ; ... ; commandN ; }

関連情報