GNUを使用してtouch
名前付きファイルを更新する方法は-
?
GNUを使用してcat
名前付きファイルを表示するには-
?
私は走っています:
% cat --version | head -n1
cat (GNU coreutils) 8.29
% touch --version | head -n1
touch (GNU coreutils) 8.29
まず、touch
:
% touch -
% ls -l
total 0
% touch -- -
% ls -l -- -
ls: cannot access '-': No such file or directory
さて、今使用をあきらめますtouch
。date
% date > -
% ls -l -
-rw-r--r-- 1 ravi ravi 29 Sep 8 19:54 -
%
今試してみましょうcat
。
% cat -
% # I pressed ^D
% cat -- -
% # Same again - I pressed ^D
私は次の問題を解決できることを知っています。
% > -
そして
% cat < -
--
しかし、なぜこのGNUユーティリティは、それ以降のすべてがオプションではないと見なされるという規則をサポートしていませんか?
一般的な場合(たとえば、コンテンツを含む変数がある場合)、これらのツールをどのように使用しますか-
?
ベストアンサー1
ファイルへの明示的なパスを使用します。
touch ./-
cat ./-
GNUはtouch
ファイルオペランドを特別に扱います-
。
FILE引数文字列は、標準出力に関連するファイルを変更する時間を
-
生成するために特別に処理されます。touch
のためにcat
、POSIX規格ファイルオペランドを-
標準入力から読み取る要求として解釈する必要があることを指定します。
デュアルダッシュルールはまだ機能していますが、表示するためのものではありません。議論しかし結局オプション。どちらの場合も-
オプションとして扱われませんが(オプションだけでは-
オプションにはできません)、オペランド(「ファイル名引数」)として扱われます。
最後の質問について:
変数の内容が使用されるときにオプションセットとして解釈されないように保護します。
utility "$variable"
使用
utility -- "$variable"
ユーティリティがcat
、、、、および他のもの(またはGNU )である場合、上記のようにこれはオプションではないためsed
、ユーティリティはまだ特別な処理を実行します。代わりに、現在の作業ディレクトリのファイルと同じように、ファイル名(で始まるか同じ場合)の前にパスがあることを指定してください。awk
paste
sort
touch
$variable
-
-
-
./
良い習慣は使用することです
for filename in ./*; do
代わりに
for filename in *; do
例えば。