端末で実行できます...
find . -type f -print0
./testdir/testfile2.txt./testdir/testfile.txt
それから...
find . -type f -printf "%p\0"
./testdir/testfile2.txt./testdir/testfile.txt
視覚的に同じように見えますが、これはnull文字に関するものなので、あまり意味がありません。 Ruby replを介して実行している場合:
2.5.1 :001 > `find . -type f -print0`
=> "./testdir/testfile2.txt\u0000./testdir/testfile.txt\u0000"
それから
2.5.1 :002 > `find . -type f -printf "%p\0"`
Traceback (most recent call last):
3: from /usr/share/rvm/rubies/ruby-2.5.1/bin/irb:11:in `<main>'
2: from (irb):2
1: from (irb):2:in ``'
ArgumentError (string contains null byte)
-print0
オプション出力との違いは何ですかprintf
?
テストシステム情報:
名前:Linux XPS-15-9570 4.15.0-30-generic #32-Ubuntu SMP Thu Jul 26 17:42:43 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
ルビー: ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]
。
答え1
違いはありません。パイプを介した出力は、cat -v
印刷できない文字をエスケープします。
たぶん物事を修正する特別なロケールがあるかもしれません-print0
。少なくとも私のen_US.UTF-8設定に違いはありません。おそらくlocale
あなたの質問にこれの結果を追加してください。
Rubyのテストによって、Rubyが\0
独自に解釈されfind
実行されないことがあります。