Help us understand the problem. What is going on with this article?

Bashにおける括弧類の意味

More than 5 years have passed since last update.

Bashのスクリプト内で {} や () や [] などの記号の意味。
詳細はここの記事に出ている。
http://stackoverflow.com/questions/2188199/how-to-use-double-or-single-bracket-parentheses-curly-braces
http://mywiki.wooledge.org/BashFAQ/031

bracket [] の意味

[]はtestコマンドの略式。
if文の引数で使う事が多い。

if [ -e "file.txt" ]; then
  echo "File exists"
fi

[ の直後と ]の直前には必ず半角スペースが必要となる。
例えば

if [-e "file.txt" ]; then
  echo "File exists"
fi

と書くと、[-e: command not found というエラーメッセージが出る。

double bracket [[ ]]

bracket と基本的には同じ。 ただし、こちらはbashのビルトインコマンド

(20150428追記) single bracketもbashの場合ビルトインコマンド。
double bracketの方が後に追加されたもので、bash,zsh,Korn shellでのみ使える。
tcshなどでは、[[は使えません。

if [[ -e "file.txt" ]]; then
  echo "File exists"
fi

double bracketの方がsingle bracketよりも機能が充実しており、&&, ||, Pattern matching, 正規表現などが使える。

[[ 1 -lt 2 && 2 -lt 3 ]]
[[ abc == a* ]]
[[ a2 =~ a[0-9] ]]

Parentheses ()

subshellを起動してコマンドを実行する。

(cd /tmp; pwd)  # => "/tmp"
pwd             # => current directory

()の中で実行したコマンドは別プロセスで実行されるので、起動したスクリプト内には何も影響を与えない。
以下のようにサブシェルの実行結果をリダイレクトすることも可能

(cd /tmp; pwd) > pwd.txt

Braces {}

「変数の展開」と 「一連のコマンドをカレントシェルで実行する」の2種類の意味がある。

  1. 変数の展開の例。このように変数名がどこまでなのか明示的に指定する。

    VAR=1234
    echo $VAR       # => "1234"
    echo $VAR1234   # => ""
    echo ${VAR}1234 # => "12341234"
    
  2. 一連のコマンドをまとめて実行。

    { time -p { sleep 1; sleep 2; echo "finished"; } > f.txt; } 2> time.txt
    

この例では f.txt に "finished"という文字列が書き込まれ、timeの実行結果がtime.txtに書き込まれる。
timeコマンドは { sleep ... } の一連の処理の合計時間が書き込まれる。

注意点

  • { ... } の中のコマンドは必ずセミコロンで終端する必要があることに注意。無いとsyntax errorになる。
    • (Parenthesesを使ってサブシェルで実行する場合にはセミコロンは不要)
  • { } は両端に空白が必要。無いとsyntax errorになる。
    • (Parenthesesの場合は不要)
yohm
科学技術計算をやっている研究者。RubyとC++をメインで使い、機械学習や統計処理のためにPythonも触る。 スクリュースロッシャーを得意ブキとして愛用するアフロタコボーイ
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした