Здесь есть две проблемы. То, что вы видите, это то, что вы используете знак доллара для переменной, которую вы назначаете - знак доллара используется для получения значения переменной, а не для ее установки. Таким образом, используйте a=$(echo "$p" | cut -d: -f1)
вместо $a=$(echo "$p" | cut -d: -f1)
.
Вторая проблема заключается в файле назначения file="~/cs/cs3776/assignment2/passwd1.txt"
- ~
необходимо развернуть до пути к вашему домашнему каталогу, но это расширение не происходит, когда оно находится в двойном цитаты. В этом случае нет ничего другого, что могло бы быть расширено, так что просто отключение кавычек (file=~/cs/cs3776/assignment2/passwd1.txt
) сработало бы. Если для остальной части строки необходимы кавычки, можно частично заключить в кавычки строку (file=~/"cs/cs3776/assignment2/passwd1.txt"
).