Linuxのコマンドライン上での書き方について質問です。


例えば、以下のようなことがしたいのですが、

 $ watch -n1 'ps aux | grep "postgres" | awk '{print $1, "foo"}' '

シングルクォーテーションとダブルクォーテーションの対応がおかしくて
こちらの意図通りに動きません。(エラーになります)

この例のように、Linuxで「"」と「'」をネストして書きたい場合、
どのように記述すれば良いのでしょうか?

よろしくお願いします。

回答の条件
  • 1人2回まで
  • 登録:2008/01/31 09:41:34
  • 終了:2008/01/31 23:02:55

ベストアンサー

id:b-wind No.2

b-wind回答回数3344ベストアンサー獲得回数4402008/01/31 10:15:57

ポイント30pt

方法1

watch -n1 "ps aux | grep 'postgres' | awk '{print \$1, \"foo\"}' "

方法2

watch -n1 'ps aux | grep "postgres" | awk '"'"'{print $1, "foo"}'"'"' '
id:kanouk

ありがとうございます。方法2をやってみたら動作しました。

# なんで動くかは理解できていませんが…

方法1は、「' が一致しません.」というエラーになってしまいます。

2008/01/31 13:18:43

その他の回答(2件)

id:fmht7 No.1

fmht7回答回数642ベストアンサー獲得回数642008/01/31 09:47:30

ポイント20pt

\(バックスラッシュ)で"や'をエスケープしてみてはいかがでしょうか ?

id:kanouk

ありがとうございます。

2008/01/31 13:17:40
id:b-wind No.2

b-wind回答回数3344ベストアンサー獲得回数4402008/01/31 10:15:57ここでベストアンサー

ポイント30pt

方法1

watch -n1 "ps aux | grep 'postgres' | awk '{print \$1, \"foo\"}' "

方法2

watch -n1 'ps aux | grep "postgres" | awk '"'"'{print $1, "foo"}'"'"' '
id:kanouk

ありがとうございます。方法2をやってみたら動作しました。

# なんで動くかは理解できていませんが…

方法1は、「' が一致しません.」というエラーになってしまいます。

2008/01/31 13:18:43
id:b-wind No.3

b-wind回答回数3344ベストアンサー獲得回数4402008/01/31 13:30:58

ポイント30pt

方法1は、「' が一致しません.」というエラーになってしまいます。

ふむ、手元の環境だと問題ないんだが。

SHELL が違うのかもしれないね。


# なんで動くかは理解できていませんが…

よーく見ると以下の五つの文字列に分解できる

'ps aux | grep "postgres" | awk '
"'"
'{print $1, "foo"}'
"'"
' '

で、これを連続して書くと一つの文字列として扱われる。

この、「一つの文字列として扱われる」点が重要なのであって、必ずしも一つのクォーテーションで囲む必要はないのです。

逆に同じ種類のクォーテーションのネストは基本的にできませんから、こういう裏ワザを使うことになります。

id:kanouk

なるほど!

とても勉強になりました。

ちなみに、手元のシェルはtcshでした。

2008/01/31 14:24:53
  • id:pyopyopyo
    watch -n1 ' ps aux | grep "postgres" | awk' \' '{print $1, "foo"} ' \'
    と書く方法もありますね.若干短くなります

    あとクォートで悩んだときは,echoコマンドを使って,確認すると良いと思います
    echo ' ps aux | grep "postgres" | awk' \' '{print $1, "foo"} ' \'

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません