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"
).
$file
nunca se usa.
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=...
.