it-swarm.it

Memorizzare l'output del comando nella variabile Shell

Ho un'operazione usando cut che vorrei assegnare il risultato a una variabile

var4=echo ztemp.xml |cut -f1 -d '.'

Ottengo l'errore:

ztemp.xml non è un comando

Il valore di var4 non viene mai assegnato; Sto cercando di assegnargli l'output di:

echo ztemp.xml | cut -f1 -d '.'

Come lo posso fare?

27
Vass

Ti consigliamo di modificare il compito per leggere:

var4="$(echo ztemp.xml | cut -f1 -d '.')"

Il costrutto $(…) è noto come command susbtitution .

39
Tok

A seconda della shell in uso, è possibile utilizzare l'espansione dei parametri. Ad esempio in bash:

   ${parameter%Word}
   ${parameter%%Word}
          Remove matching suffix pattern.  The Word is expanded to produce
          a pattern just as in pathname expansion.  If the pattern matches
          a trailing portion of the expanded value of parameter, then  the
          result  of the expansion is the expanded value of parameter with
          the shortest matching pattern (the ``%'' case)  or  the  longest
          matching  pattern  (the ``%%'' case) deleted.  If parameter is @
          or *, the pattern removal operation is  applied  to  each  posi‐
          tional  parameter  in  turn,  and the expansion is the resultant
          list.  If parameter is an array variable subscripted with  @  or
          *,  the  pattern  removal operation is applied to each member of
          the array in turn, and the expansion is the resultant list.

Nel tuo caso ciò significherebbe fare qualcosa del genere:

var4=ztemp.xml
var4=${var4%.*}

Nota che il carattere # si comporta in modo simile nella parte prefisso della stringa.

Ksh, Zsh e Bash offrono tutti un'altra sintassi, forse più chiara:

var4=$(echo ztemp.xml | cut -f1 -d '.')

I backtick (a.k.a. "Grave accent") sono illeggibili in alcuni caratteri. La sintassi $(blahblah) è almeno molto più ovvia.

Si noti che è possibile reindirizzare i valori in un comando read in alcune shell:

ls -1 \*.\* | cut -f1 -d'.' | while read VAR4; do echo $VAR4; done
8
Bruce Ediger

Questo è un altro modo per assegnare una variabile, utile da utilizzare con alcuni editor di testo che non sono in grado di evidenziare correttamente ogni codice complesso creato.

read -r -d '' str < <(cat somefile.txt)
echo "${#str}"
echo "$str"
3
Aquarius Power