質問

何か違いはありますか? ":> ファイル」 そして > ファイル」?

$ : > file.out
$ ls -l file.out
-rw-rw----   1 user    user             0 Mar 18 21:08 file.out
$ > file.out
$ ls -l  file.out
-rw-rw----   1 user    user             0 Mar 18 21:08 file.out
役に立ちましたか?

解決

:内蔵NO-OP又はヌル操作シェルです。ファイルには何も指示しない場合と同様そうそう、ファイルにそれを向けることは、空のファイルで終わります。あなたのソースが何も別の種類ですが、結果は同じである意味は、私が思う、あります。よる先進のBashスクリプトガイドで、 "> file.out" へ製剤は、いくつかのシステムでは動作しません。

(「タッチ」とは違って)どちらの場合も、ファイルの内容は、ファイルがすでに存在する場合は何も置き換えられますことを。

注意

他のヒント

: > file.outを使用すると、非バッシュによりポータブルです。例えば、zshのは、(エミュレーションモードでないかぎり)catない、:としてデフォルトのヌルコマンドを定義します。あなたは今まで(例えば、*のBSDシステム、任意のクローズドソースのOS、あるいは今でもいくつかのGNU / Linuxディストリビューションで、ダッシュが使用されている場合)、あなたの」bashのではありません/bin/shでスクリプトを動作させるために必要終わる場合あなたが: > file.outを使用する場合は、あなたの人生を容易にするでしょう。

ちょうどリダイレクション付きバージョンがちょうどゼロ以外の終了ステータスを返しながら、リダイレクションが失敗した場合、

POSIXによれば、作業しかし:とバージョンの両方が中止します。後者のケースでは、trueを用いることがよりポータブルである。

bashはPOSIXモードでのみ、この権利を行います。

エイリアスまたは:という名前の関数は、アプリケーション上でPOSIXの制約に違反して移植することはできません。

私は考えることができる唯一の違いは、エイリアスや関数の定義を経由して:を再定義することができるということです。たとえば、あなたは、ほとんどの時間(:のデフォルト何もしない動作を使用して)ファイルを切り捨てるが、いくつかのケースでは、標準ヘッダを持っているファイルを強制することもできます。フォーム> fileを再定義することはできません。

#! /bin/bash

test -n "$ADD_COPYRIGHT" &&
  :() { echo "# Copyright (c) 2010 MyName"; echo; }

# Truncate the file to zero size, unless ADD_COPYRIGHT is set, in which case
# the file is truncated to contain only a copyright notice.
: > file

# Add content to the file
some_command >> file
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top