他の質問でこのコードを見ましたが、答えについて言及できないので、ここに質問します。
tr '\n' '\0' < file 1<> file
この部分に興味がありますが1<>
、見たこともなく、Googleでも役に立つ内容が見つかりません。
答え1
これは答えにありますスティーブン・チェイザーズ(Stephen Chazeras)が書いた。。これはPOSIX シェル機能これは具体的ではありませんbash
。他のリダイレクト演算子の説明とともに、シェルのドキュメントに記載されています。
読み書きのために標準出力であるファイル記述子1を開き、それを1<>file
現在のディレクトリの指定されたファイルに追加します。file
それ以前は、同じファイルの標準入力を追加しました。
tr
次に、標準入力から読み込み、file
すべての改行文字をNULL文字に変更します。出力はtr
同じファイルに書き戻されます。
tr
これは、コマンドの結果がその中の元のデータと同じくらい長い場合に機能しますfile
。
結果がtr
元のファイルより短い場合は、ファイルの末尾に「古いデータ」が表示されます。
$ cat file
too many @ here: @@@@
the end
$ tr -s '@' <file 1<>file
$ cat file
too many @ here: @
the end
nd
>
使用できませんのでご注意ください
tr '\n' '\0' <file >file
file
これは読み取り前に切り捨てられるためです(出力ファイルは切り捨てられませんが、まだ存在しない場合は生成されます)。tr
1<>
その人も>>
書けません。
tr '\n' '\0' <file >>file
これは、出力をtr
ファイルの末尾に追加し、古いデータがそのまま残るためです。