Cosa significa esattamente "<>" in "echo <> temp.txt"?

File non esistente

$ ls file_not_exists.txt ls: cannot access file_not_exists.txt: No such file or directory $ echo <> file_not_exists.txt $ ls file_not_exists.txt file_not_exists.txt $ cat file_not_exists.txt $ 

File con contenuto

 $ cat temp.txt asdf $ echo temp.txt temp.txt $ echo <> temp.txt $ cat temp.txt asdf 

Se il file non esiste, echo <> file_not_exists.txt crea un nuovo file. Quindi penso > funziona (reindirizzando l'output vuoto in un file appena creato). Ma se c'è qualcosa nel file (come temp.txt ), perché non viene svuotata da echo <> temp.txt ?

Dalla Guida alla Script di Avanzate Bash

 [j]<>filename # Open file "filename" for reading and writing, #+ and assign file descriptor "j" to it. # If "filename" does not exist, create it. # If file descriptor "j" is not specified, default to fd 0, stdin. # # An application of this is writing at a specified place in a file. echo 1234567890 > File # Write string to "File". exec 3<> File # Open "File" and assign fd 3 to it. read -n 4 <&3 # Read only 4 characters. echo -n . >&3 # Write a decimal point there. exec 3>&- # Close fd 3. cat File # ==> 1234.67890 # Random access, by golly. 

Così,

 echo <> temp.txt 

Crea temp.txt se non esiste e printing una row vuota. Questo è tutto. È equivalente a:

 touch temp.txt && echo 

Nota, la maggior parte dei programmi non si aspetta che il descrittore di file STDIN (0) sia aperto per la scrittura, per cui nella maggior parte dei casi, i seguenti saranno approssimativamente equivalenti:

 command <> file command 0<> file touch file && command < file 

E poiché la maggior parte dei programmi non prevede che STDOUT sia aperto per la lettura, i seguenti sono generalmente equivalenti:

 command 1<> file command > file 

E per STDERR:

 command 2<> file command &2> file 

echo <> temp.txt provoca l'apertura del file temp.txt sia per la lettura che la scrittura sul descrittore di file 0 (stdin).

man bash :

Descrizioni dei file di apertura per la lettura e la scrittura L'operatore di reindirizzamento

  [n]<>word causes the file whose name is the expansion of word to be opened for both reading and writing on file descriptor n, or on file descriptor 0 if n is not specified. If the file does not exist, it is created.