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
echo
comando como has mostrado, ¿qué has hecho para intentar diagnosticar esto? ¿Estás obteniendo algún resultado? ¿Estás seguro de que elpasswd1.txt
archivo 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=...
.Respuestas:
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"
).fuente
$file
nunca se usa.