comando de almacenamiento bash en variable


1

Hola, soy nuevo en bash y por alguna razón no puedo almacenar la salida en una variable

#!/bin/bash
file="~/cs/cs3776/assignment2/passwd1.txt"
while read p; do

        echo "$p" | cut -d: -f1





done < passwd1.txt

cambiando el eco a

$a=$(echo "$p" | cut -d: -f1)
echo "$a"

no parece funcionar


Además de cambiar el echocomando como has mostrado, ¿qué has hecho para intentar diagnosticar esto? ¿Estás obteniendo algún resultado? ¿Estás seguro de que el passwd1.txtarchivo tiene texto? ¿Está formateado como /etc/passwd? Si no es así, muéstrenos cómo se ve: no tiene que ser su información real , solo algo para ilustrar el formato. PD: a=...no $a=....
G-Man

Respuestas:


1

Hay dos problemas aquí. Lo que está viendo es que está usando un signo de dólar en la variable que está asignando: el signo de dólar se usa para obtener el valor de una variable, no para establecerla. Por lo tanto, use en a=$(echo "$p" | cut -d: -f1)lugar de $a=$(echo "$p" | cut -d: -f1).

El segundo problema está en la asignación file="~/cs/cs3776/assignment2/passwd1.txt": la ~necesidad de expandirse a la ruta a su directorio de inicio, pero esa expansión no ocurre cuando está entre comillas dobles. En este caso, no hay nada más que se pueda expandir, por lo que simplemente dejar las comillas ( file=~/cs/cs3776/assignment2/passwd1.txt) funcionaría. Si se necesitaran comillas para el resto de la cadena, es posible comillas parciales ( file=~/"cs/cs3776/assignment2/passwd1.txt").


Lo que escribiste sobre el segundo problema es correcto en general, es bueno que hayas visto esto. En este caso particular, no cambia nada porque $filenunca se usa.
Kamil Maciorowski
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.