编辑:我意识到这与它无关$()
,只是使用的结果echo *
。所以我只需要一种逃避的方法echo
。
/etc/passwd
我正在编写一个脚本,通过比较和 来检查哪些用户没有密码/etc/shadow
。
到目前为止我有:
cat /etc/passwd | while read -r line ; do
user=$(echo $line | cut -d ":" -f 1)
password=$(cat /etc/shadow | grep $user | cut -d ":" -f 2)
echo $password
done
问题是,当我的 grep 结果是*
密码字段时(所有没有密码的用户都是这种情况),似乎ls *
执行了?例如:
我很困惑为什么会发生这种情况。谁能解释一下这里发生了什么?图片底部带有加密密码的答案是预期的行为。对于没有密码的条目,我希望得到一个*
.
答案1
echo "$password"
这将允许插入变量(此处为*
),而无需调用 shell 全局变量。