3

bashを使ってシェルプログラムを作っています。

ls -l <ファイル名>

で<ファイル名>に空白が入っていると一つのファイル名と扱ってくれないので、<ファイル名>の中の空白を\ (空白の前にエスケープを付ける)ことを行っています。
しかし、調べ切れていませんが、[]や、()などもエスケープ(?)しなければいけないようなエラーが発生しています(ここがよくわかりません)

<ファイル名>を一つのファイル名として扱えるにはどのように変換すればいいのでしょうか?
また<ファイル名>を変換後のものにできるいい方法をご存知であればご教授お願いします。

Yuki Inoue
  • 16,805
  • 19
  • 80
  • 196
Ubunkun
  • 1,803
  • 7
  • 47
  • 74
  • 1
    ファイル名をシングルクォートで囲んでみてはどうでしょう。 –  Oct 29 '16 at 16:36

1 Answers1

4

ファイル名をベタ打ちするシェルスクリプトの場合

ls -l '<ファイル名>' で、ファイル名にシングルクォートがはいっている場合以外は対応できます。

ファイル名をシェル変数から展開する場合

もう少し追記。もし、<ファイル名>を変数 v に代入してから使いたいとかならば、次のようにすれば良いです。

v='<ファイル名>'
ls -l "$v"
Yuki Inoue
  • 16,805
  • 19
  • 80
  • 196
  • 仮に空白があると、空白で区切られた部分それぞれが別々のファイル名のように取り扱われるようです。 – Ubunkun Nov 04 '16 at 04:16