Existem dois problemas aqui. O que você está vendo é que você está usando um sinal de dólar na variável que está atribuindo - o sinal de dólar é usado para obter o valor de uma variável, e não para defini-la. Portanto, use a=$(echo "$p" | cut -d: -f1)
em vez de $a=$(echo "$p" | cut -d: -f1)
.
O segundo problema está na atribuição file="~/cs/cs3776/assignment2/passwd1.txt"
- o ~
precisa ser expandido para o caminho para o diretório inicial, mas essa expansão não acontece quando está entre aspas duplas. Neste caso, não há mais nada que possa ser expandido, então apenas deixar de lado as cotações ( file=~/cs/cs3776/assignment2/passwd1.txt
) funcionaria. Se aspas forem necessárias para o resto da string, é possível citar parcialmente a string ( file=~/"cs/cs3776/assignment2/passwd1.txt"
).