私は一般的にLinuxにかなり慣れていないので、いくつかのコマンドのdoやdoについてあまり詳しくありません。
ファイルを作成したかったのですが、次のことに気づきました。
touch file.txt `
ファイルを作成しますが、そうします:
echo >> file.txt
そしてまた
> file.txt
">"と "touch"で作成されたファイルはどちらも0バイトですが、 "echo"で作成されたファイルは1バイトです。
ファイルのサイズが異なるのはなぜですか?ファイルを作成するための最良の方法は何ですか? 「touch」や「>」ではなく「echo」を使ってファイルを作成する必要があるのはいつですか。
ファイルの作成に関する一般的な質問については、次を参照してください。 ファイルを作成するためのシェルコマンドがないのはなぜですか?
> file
とecho >> file
の両方を使用すると、Shellはファイルがまだ存在しない場合に作成します。
> file
を使用すると、ファイルがすでに存在する場合、そのファイルは切り捨てられます。コマンドが指定されなかったため、ファイルには何も書き込まれず、ファイルは空になります。
echo
は引数なしで空行を出力します。したがって、出力には行末文字、通常は改行(LF、\n
)が含まれます。
% echo | od -c
0000000 \n
0000001
したがって、echo >> file
を使用すると、ファイルに1バイトが書き込まれます。ファイルがすでに存在する場合、>>
(上書き)ではなく>
(追加)を使用したため、ファイルに1バイトが追加されます。
touch
は、まだ存在しない場合はファイルを作成し、それ以外の場合はファイルのタイムスタンプを更新します。 touch
はファイルの内容を変更しないので、ファイルが既に存在し、その中に内容が含まれている場合、touch
の後も内容は変わりません。
どちらを使用するかは、使用するエフェクトによって異なります。
muruの回答 動作の違いをうまく説明しています。
何をしたいかに応じて、まったく同じことを実現するための複数の方法が考えられます。その場合、それは「味」または読みやすさの問題になる可能性があります。私はtouch
を好みます。それは間違いなく安全です-ファイルがすでに存在していて、その内容を失いたくない場合。それも印象的です。
スクリプトでコマンドを記述している場合、一般的な規則は、人々がコードを書いた回数よりも多くコードを読むことです。つまりコンピュータだけでなく、人間とコミュニケーションをとっています。次のコード行は少しわかりにくいかもしれません。
> file
> file
とまったく同じ動作が必要な場合は、truncate
というコマンドもあります。 truncate
は、GNU coreutils。