$file
たとえば、bashDr' A.tif
プログラミングで$file
一重引用符やその他の特殊文字を削除せずにエスケープする方法は何ですか?
2014年7月9日更新
〜のように@Gillesのリクエスト、次のコードスニペットを処理できませんDr' A.tif
。
files=$(find /path/ -maxdepth 1 -name "*.[Pp][Dd][Ff]" -o -name "*.[Tt][Ii][Ff]")
echo "${files}" > ${TEMP_FILE}
while read file
do
newfile=$(echo "${file}" | sed 's, ,\\ ,g') ## line 1
done < ${TEMP_FILE}
試した後@パトリックの答えでline 1
、それは私に合うようです。しかし、このコマンドは役に立たないようですDr\^s A.tif
。 。次のようにコンソールで手動で試した場合:printf
Dr\^s\ A.tif
printf "%q" "Dr\^s A.tif"
以下の結果が出力されます。
Dr\\\^s\ A.tif
この問題を解決する方法を知っていますか?
ベストアンサー1
printf
組み込みのwithを使用して%q
これを行うことができます。たとえば、
$ file="Dr' A.tif"
$ printf '%q\n' "$file"
Dr\'\ A.tif
$ file=' foo$bar\baz`'
$ printf '%q\n' "$file"
\ foo\$bar\\baz\`
Bashドキュメントからprintf
:
In addition to the standard format specifications described in printf(1) and printf(3), printf interprets: %b expand backslash escape sequences in the corresponding argument %q quote the argument in a way that can be reused as shell input %(fmt)T output the date-time string resulting from using FMT as a format string for strftime(3)