アニメ『冴えない彼女の育てかた♭』
2期目では、ものづくり色が濃くなってます。本当に良い作品は、余裕のない状態で生まれるのでしょうか、それとも余裕がある状態で生まれるのでしょうか。
暇な時より忙しくしていた方がいろんなことがやれるってのは、ただの怠慢にも感じます。暇な時に無計画でさぼってただけですので。本当に忙しいと、寝ることもできないはずなので、その時心に刻んだ苦しみを覚えていれば、暇な時にさぼったりしないよなあ、なんて思います。
今回は空白入りファイルのまとめ方、というかbashでのさばき方です。
空白入りファイルをforで回そうとすると、デリミタと認識してしまいファイル名が空白部分で分割されてしまいます。
空白入りファイル
空白入りファイルとして以下のファイルを使います。
takk@debian:~$ ls -1 file 001.txt file 002.txt file 003.txt file 004.txt file 005.txt file 006.txt file 007.txt file 008.txt file 009.txt file 010.txt takk@debian:~$
findの結果でforを回す場合
findの結果をforへ渡すと、見事にスペースで区切られます。
takk@debian:~$ for m in `find`;do echo $m;done . ./file 001.txt ./file 006.txt ./file 002.txt (省略) ./file 009.txt ./file 005.txt takk@debian:~$
lsの結果でforを回す場合
こちらもfindと同様です。
takk@debian:~$ for m in `ls`;do echo $m;done file 001.txt file 002.txt file 003.txt (省略) file 009.txt file 010.txt takk@debian:~$
変数に代入すればわかる通り、空白は
takk@debian:~$ aaa=(file 001.txt file 002.txt) takk@debian:~$ echo ${aaa[1]} 001.txt takk@debian:~$
デリミタを空白から改行へ変更
解決方法としては、デフォルトのデリミタは空白となっていますので、改行に切り替えてやればよいだけです。
takk@debian:~$ echo $IFS | od -td1 0000000 10 0000001 takk@debian:~$
IFSは以下のようにバックアップしてから後で戻してもよいですが、
takk@debian:~$IFS_BACKUP=$IFS
面倒なので、以下のように()で囲んで別プロセス内で使用します。
takk@debian:~$ (IFS=$'\n';for m in `find`;do echo $m;done) . ./file 001.txt ./file 006.txt ./file 002.txt ./file 008.txt ./file 003.txt ./file 007.txt ./file 010.txt ./file 004.txt ./file 009.txt ./file 005.txt takk@debian:~$
難なく空白入りファイル名で回すことができました。
コメント