人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

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

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

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

よろしくお願いします。

●質問者: kenk
●カテゴリ:コンピュータ
✍キーワード:AUX AWK grep Linux print
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● fmht7
●20ポイント

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

◎質問者からの返答

ありがとうございます。


2 ● b-wind
●30ポイント ベストアンサー

方法1

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

方法2

watch -n1 'ps aux | grep "postgres" | awk '"'"'{print $1, "foo"}'"'"' '
◎質問者からの返答

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

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

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


3 ● b-wind
●30ポイント

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

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

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


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

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

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

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

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

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

◎質問者からの返答

なるほど!

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ