it-swarm-es.tech

Almacenar la salida del comando en la variable Shell

Tengo una operación usando cut que me gustaría asignar el resultado a una variable

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

Me sale el error:

ztemp.xml no es un comando

El valor de var4 nunca se le asigna; Estoy tratando de asignarle la salida de:

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

¿Cómo puedo hacer eso?

27
Vass

Querrás modificar tu tarea para leer:

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

La construcción $(…) se conoce como comando susbtitution .

39
Tok

Dependiendo del Shell que esté usando, puede usar la Expansión de parámetros. Por ejemplo en 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.

En su caso, eso significaría hacer algo como esto:

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

Tenga en cuenta que el carácter # se comporta de manera similar en la parte del prefijo de la cadena.

Ksh, Zsh y Bash ofrecen otra sintaxis, quizás más clara:

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

Los backticks (también conocidos como "acento grave") son ilegibles en algunas fuentes. La sintaxis $(blahblah) es mucho más obvia al menos.

Tenga en cuenta que puede canalizar valores en un comando read en algunos shells:

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

Esta es otra forma de asignar una variable, buena para usar con algunos editores de texto que no pueden resaltar correctamente cada código complejo que cree.

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