アプリ版:「スタンプのみでお礼する」機能のリリースについて

Red Had系使用していますが、コマンドの連続実行とコマンドのグループ化の違いがいまひとつ分かりません。
たとえば、 cd /var;ls;pwd(コマンドの連続実行)と{ cd /var;ls; };pwd
(コマンドのグループ化)の実行結果が同じであり、このコマンドのグループ化とは一体何の意味があるのですか?
返答の程よろしくお願い致します。

A 回答 (4件)

No.1 です。


No.3 さんのおっしゃる通りですね。
私も、質問者さんの [cd /var; ls]; pwd というのは多分書き間違いだろうと勝手に解釈して、No.1 のような回答を出しました。

ところで蛇足ですが、{ } よりも ( ) を使った方が良いと思います。

{ } は、サポートしていない UNIX(というかシェル)が結構たくさんありますが、今までに ( ) をサポートしていないものに出会ったことはないので、( ) の方がどこでも安心して使えると思うからです。

以上、ご参考まで…

この回答への補足

申し訳ございません。タイプミスのようです。
ちなみに{cd /var; ls; pwd} > tempの書き方ではbashシェルにおこられてしまうようです。正しくは{ cd /var; ls; pwd;} > tempでうまくいきます。{の前にスペースとpwdのあとに;がいるようです。

補足日時:2004/12/23 21:50
    • good
    • 0

#2です。


> { cd /var;ls; };pwd > tempと入力しましたが実行結果がコマンドの連続実行と同じものが出力されました。なぜでしょうか?

#1の方は、
{cd /var; ls; pwd} > temp
と書かれてますが、それと違うことをやっているのは意図的でしょうか?タイプミスでしょうか?
{ cd /var;ls; };pwd > temp
であればpwdはグループ化の外なので、リダイレクトはpwdだけに効き、
cd /var;ls; pwd > temp
と同じ結果になります。

この回答への補足

申し訳ございません。タイプミスのようです。
ちなみに{cd /var; ls; pwd} > tempの書き方ではbashシェルにおこられてしまうようです。正しくは{ cd /var; ls; pwd;} > tempでうまくいきます。{の前にスペースとpwdのあとに;がいるようです。

補足日時:2004/12/23 21:43
    • good
    • 0

他には、条件実行の時。


test -f aaa && { date ; wc aaa; }
この例では、aaa というファイルが存在した時に { } を実行します。まあ、
if test -f aaa
then date
wc aaa
fi
と書いてもいいんですけど。

この回答への補足

返答ありがとうございます。参考になりました。ところで、ANo.1の方法で連続実行、グループコマンドが同じ結果になったのですが、なぜでしょうか?

補足日時:2004/12/14 13:20
    • good
    • 0

コマンドのグループ化を行うと、例えば複数のコマンドの実行結果をまとめて一個のファイルに出力することができます。



ご質問の例で言えば、
  cd /var; ls; pwd > temp
とすると、temp に入るのは pwd の出力結果だけですが、
  {cd /var; ls; pwd} > temp
とすると、3つのコマンドの出力結果(実際には cd /var は何も出力しませんが)を、temp に入れることができます。

グループ化には、{ } の他にも ( ) があり、これを使うとサブシェルで ( ) 内が実行されるので、一時的な環境変数をセットしたりする場合に便利です。

この回答への補足

{ cd /var;ls; };pwd > tempと入力しましたが実行結果がコマンドの連続実行と同じものが出力されました。なぜでしょうか?

補足日時:2004/12/14 13:16
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!