今日、私は興味深いコマンド「 [ ‘(角括弧)nixCraftと呼ばれる有名なLinuxブログを介して。 「/ usr / bin /[」の使用法を説明した非常に興味深い投稿でした Linuxの‘コマンド。しかし、ご存知のとおり、私はLinuxで数年間働いており、nixcraftからのツイートがニュースフィードに表示されるまで、このコマンドを知りませんでした。皆さんから学びました、ありがとう。
さて、私はnixCraftから学んだことを共有するためにこの投稿を書いています。基本的に「/ usr / bin / [ ‘コマンドは‘ test と同じです Linuxの‘コマンド。説明させてください。
シェルプログラミングでは、特定のファイルが存在するかどうかを確認したい場合は、通常、IF condが存在しない場合に使用しますか?以下に示すようなもの:
if [ -f /etc/passwd ] then echo "Yes" else echo "No" fi
さて、「 / etc / passwd ‘が存在すると、「はい」という出力が表示されます。 」else「いいえ 「。これは簡単で、同じことを行って値を比較することもできます。しかし、「 [ ‘ if の後の‘括弧 ‘?そこに、 / usr / bin / [ ‘が登場します。
または、以下のように(IFなしで)ファイルが存在するかどうかを確認できます。
[demo ~]$ [ -f /etc/passwd ] && echo "Yes" || echo "No" Yes [demo ~]$ [ -f /etc/passwd1 ] && echo "Yes" || echo "No" No
上記のスニペットでは、‘[‘ 指図。言われたように、コマンドは「 test」と同じです ‘。以下の例を確認してください:
if test -f /etc/passwd then echo "Yes" else echo "No" fi
はい、両方とも「 [ ‘および‘テスト 「同じ仕事をしますが、それらは対称的ですか?私もそれをチェックしましたが、そうではありません。
[demo ~]$ ls -l /usr/bin/test -rwxr-xr-x 1 root root 30064 Mar 21 2012 /usr/bin/test
[demo ~]$ ls -l /usr/bin/[ -rwxr-xr-x 1 root root 32296 Mar 21 2012 /usr/bin/[
基本的に、「 [ ‘は組み込みのシェルコマンドです。 「type」を使用して確認します ‘コマンドは以下のとおりです:
[demo ~]$ type -a [ [ is a shell builtin [ is /usr/bin/[
注: 「[」と表示されます ‘はLinuxに組み込まれているコマンドです。つまり、コマンドにスラッシュが含まれていない場合、SHELLは PATHを介してコマンドを見つけようとします。 変数。
コマンドなので、マニュアルページがあるはずですよね?
[demo ~]$ man [ No manual entry for [の手動入力なし
「[」のマニュアルページが見つかりませんでした ‘、それから‘ testのmanページを見ました ‘下部に、‘ [ ‘。以下を参照してください:
[demo ~]$ man test ::::::::::::: NOTE: your shell may have its own version of test and/or [, which usually supersedes the version described here. Please refer to your shell's documentation for details about the options it supports.
ボーナス…‘[‘のように‘[[‘もあります
[demo ~]$ type -a [[ [[ is a shell keyword
‘ [[ ‘は実際にはSHELLの他のキーワードと同様のキーワードです–‘ !完了するまで、{}時間の間に[[]]の場合、ケース関数にelif elseesacfiを選択します。 ‘
キーワードなので、コマンドとして見つけることはできません。
[demo ~]$ ls -l /usr/bin/[[ ls: /usr/bin/[[: No such file or directory
[demo@gridfs ~]$ whereis [[ [[: