Python には非常に便利な関数repr()があり、空白文字を含む文字列に適用すると、その文字列の表現が出力され、文字列の実際の内容を人間が誤解することはありません。
例えば:
$ python -c "print repr(r'''abcde\rfghi\tjklmn\nopqr\bstuv\fwxyz''')"
'abcde\\rfghi\\tjklmn\\nopqr\\bstuv\\fwxyz'
printfを使用して bash で同じことを行うにはどうすればよいですか?
私が探している完璧なツール/トリックは、文字通り印刷されます
'abcd\refjh\bijk'
コマンドの
printf "abcd\refjh\bijk" | <something>
この背後にある意図は、2 つの文字列の違いを出力するテスト ツールを改善することです。
http_response_code=$(curl -s --head http://httpbin.org/ | head -1) # will put "HTTP/1.1 200 OK\r" in $http_response_code
assert_equal "HTTP/1.1 200 OK" "$http_response_code"
> failed: strings do not match
> expected: 'HTTP/1.1 200 OK'
> actual: 'HTTP/1.1 200 OK'
ご覧のとおり、現在の実装では、ユーザーは失敗の理由について無知で混乱しています。
理想的には、代わりに次の出力が必要です。
> failed: strings do not match
> expected: 'HTTP/1.1 200 OK'
> actual: 'HTTP/1.1 200 OK\r'
現在の試み:
printf $'\a\b\e\E\f\n\r\t\v\\\'\"' | cat -A
echo $'\a\b\e\E\f\n\r\t\v\\\'\"' | cat -A | sed -r '$!{ N;s/\$\n/\\n/;t sub-yes;:sub-not;P;D;:sub-yes;}'
printf $'\a\b\e\E\f\n\r\t\v\\\'\"' | od -c