複数のファイルに対する処理を for ループで行うと
for file in file1 file2 ‘file3 abc’; do
ls $file
done
のように書け、
file1
file2
file3 abc
のような結果になりますが、
ユーザが指定したファイル群に対して処理をしたいとき、for ループで次のようにすると
$filelist=”
file1
file2
‘file3 abc’
“
for file in $filelist; do
ls $file
done
とすると、
file1
file2
‘file3
abc’
となってしまいます。
この対策として . でスペースを置換するアドホックな対応をしてみました。
filelist=”
file1
file2
‘file3 abc’
“
for file in ` echo “$filelist” | sed -e ‘s/\\./\\\\./g’ -e ‘s/ /./g ‘`; do # 既存の “.” は “\.” に, ” ” は “.” に置換
file=`echo “${file}” | sed -e ‘s/\\./ /g’ -e ‘s/\\\\././g’` # 置換を元に戻す
ls “$file” # “” で囲むのは必須
done
結果:
file1
file2
file3 abc
他にいい方法があれば是非御連絡を m(. .)m