“:> файл” VS “> файл”

Есть ли любые различия между ":> файл" и"> файл"?

$ : > 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
5
задан Carl Norum 18 March 2010 в 19:13
поделиться

3 ответа

: - это встроенная в оболочка NO-OP или нулевая операция. Так что да, направление его в файл заканчивается пустым файлом, как и ничего не направление в файл. Я полагаю, что в каком-то смысле ваш источник - это нечто иное, но результат тот же. Согласно расширенному руководству по написанию сценариев Bash , формулировка «> file.out » не будет работать в некоторых системах.

Обратите внимание, что в обоих случаях (в отличие от «touch») содержимое файла будет заменено ничем, если файл уже существует.

4
ответ дан 13 December 2019 в 19:24
поделиться

Единственное отличие, о котором я могу думать, это то, что вы можете переопределять : через псевдонимы или определения функций. Например, вы можете захотеть усекать файлы большую часть времени (используя стандартное поведение :), но в некоторых случаях заставлять файлы иметь стандартный заголовок. Форма > 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
1
ответ дан 13 December 2019 в 19:24
поделиться

Использование :> file.out более переносимо для не-bash. Например, zsh определяет нулевую команду по умолчанию как cat , а не : (за исключением режима эмуляции). Если вам когда-нибудь понадобится заставить скрипт работать с / bin / sh , который не является bash (например, система * BSD, любая ОС с закрытым исходным кодом или даже сейчас в некоторых дистрибутивах GNU / Linux) , где используется тире), вы упростите себе жизнь, если воспользуетесь :> file.out

4
ответ дан 13 December 2019 в 19:24
поделиться