*nixの末尾の「:」(コロン)とはどういう意味ですか? [閉鎖]

*nixの末尾の「:」(コロン)とはどういう意味ですか? [閉鎖]

私は現在ここにあるシェルスクリプトのチュートリアルに従っています。 http://www.cs.columbia.edu/~sauce/tutorial/ashell.html私は私のスクリプトがこのスクリプトに完全に収まると思います。ただし、例を実行しようとすると、出力が一致しません。あいまいに聞きたくないし、「なぜ動作しないの?」と聞きたくないので、理解できない部分に集中します。コマンド":"の後になぜありますかtestlogin:?私は" : "(両側にスペース)と先行の意味を議論する多くのフォーラムを読んだが、後の":"コロンの使用については何も読んでいない。この文脈では、どういう意味ですか?これがタイプミスの場合、例で正しく機能しない可能性がある別のタイプミスを見つけるのに役立つ人はいますか?

どんな助けでも大変感謝します!

コード(上記にリンクしたウェブサイトから正確にコピーしました)は次のとおりです。

#testlogin
useron(){
if ( who | grep $1 > /dev/null)
then echo $1 is logged in
else echo $1 is not logged in
fi 
}
if test $# != 1
then echo testlogin: username
else useron
fi

そして出力

paul@paul-LC22UP:~$ .testlogin paul
Usage: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information.
is no logged in

ベストアンサー1

testloginこれはコマンドではなくパラメータですecho。完全なコマンドは次のとおりです。

 echo testlogin: username

echoSTDOUTに提供したテキストを吐き出すだけです。したがって、コロンは特別な意味を持たず、蓄積的な出力の一部ですecho。無効な数の引数を使用してスクリプトを呼び出すと、出力は次のようになります。

$ ./testlogin
testlogin: username
$ ./testlogin fred bill adam
testlogin: username

これは奇妙な出力ですが、必ずしもタイプミスではありません。私は通常、次のことをもっと楽しみにしています。

$ ./testlogin
Usage: testlogin username

スクリプト全体がうまくいかないのは、作成者がuseron関数を呼び出すときに微妙な間違いを犯し、おそらく投稿する前にスクリプトをテストしていないためです(あるいは、作成者もあなたと同じ間違いを見つけました)。関数$1useron最初のパラメータです。その機能に、スクリプト全体ではなくuseron引数なしで呼び出されたため、空の文字列なので、最終的に次のコマンドが実行されます。

$ who | grep

grepこれはsの使用法情報を提供し、常にelse条件分岐をトリガします。次のように、最初のパラメータをスクリプトに渡すことでこの問題を解決できますuseron

else useron $1

おすすめ記事