読者です 読者をやめる 読者になる 読者になる

日々精進

新しく学んだことを書き留めていきます

awkで切り出した文字列を他のコマンドに渡す

shell

pecoを使い出してから快適ターミナル生活を楽しんでおります。
ファイル選択をpecoでやりたくて以下のaliasを定義してみた。以下に出てくる\はすべてバックスラッシュが正しい。(はてなにバックスラッシュ出せない。。情弱ですいません)

alias -g F='`ls | peco | awk '\''{ print $9 }'\''`'

これを定義するときに、awkでファイル名だけ切り出しているはずなのにlsの行全体が他のコマンドに渡されてしまい困った。最初に書いた定義は↓。

alias -g F='`ls | peco | awk "{ print \$9 }"`'

どうもawkの引数はシングルクォートでないとおかしくなるっぽい。awkだけで使う場合はダブルクォートでも中の文字をエスケープすれば大丈夫なのに。。
以下のようにシングルクォートをエスケープしてもだめだった。

alias -g F='`ls | peco | awk \'{ print \$9 }\'`'

シングルクォートの中でシングルクォートをエスケープする場合、以下のように書かないといけないらしい。\の後はシングルクォートを二つ並べて書いている。

alias -g F='`ls | peco | awk '\''{ print $9 }'\''`'

これでopen Fとかしたらpecoでファイルを選択して開けるようになった。快適!