文字列の特殊文字をエスケープする方法は?

文字列の特殊文字をエスケープする方法は?

$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。 。次のようにコンソールで手動で試した場合:printfDr\^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)

おすすめ記事