[覚書](shなどの)シェルスクリプトでスペースや空白を含むファイル名を処理したい
ファイル名に空白とか入っているとファイル名のリストが入った引数とかをforで回したときに空白でファイル名が分割されちゃって期待した動きにならないよね。対策はフィールドセパレータ環境変数を設定するだけの事で具体的にはIFSに改行をセットすれば良い。下記はその例。
#!/bin/sh
IFS="
"
for FILE in *
do
hoge $FILE
done
や
#!/bin/sh
IFS=\
for FILE in *
do
hoge $FILE
done
重要なのはIFS変数をセットしている行の記述で\や”の前後のスペースとかタブに気をつけるという事。いうまでもないことだけど、改行だけをセットするように記述しましょう。
互換性の問題なのか知らんけどIFSやFS変数のデフォルト設定値が古く、今時の空白を含んだファイル名に対処できないというのはちと問題な気がするなあ。せっかくのシェル力が勿体ないよ。
カテゴリー:Uncategorized
シェル, シェルスクリプト, スクリプト, スペース, スペースや空白を含むファイル名, ファイル名, 覚書, sh
御言葉一覧