答案1
这不是问题grep
- 这是未加引号的变量扩展的问题
echo $query
grep
并且返回的匹配行包含通配符这一事实*
。在 中tcsh
,不成功的 glob 的默认行为类似于 bash 的failglob
选项 - 错误告诉您没有文件名匹配对于你的密码字符串:
$ tcsh -c 'echo dol_gr:*:3291'
echo: No match.
正如 Stéphane Chazelas 所提到的,在 (t)csh 中引用变量扩展的正确方法是使用修饰符q
。另请注意,当未加引号时,tcsh
会`...`
在 SPC、TAB 和 NL 上进行拆分,而仅在加引号时才会在 NL 上进行拆分:
set query = "`grep $login:q /etc/passwd`"
echo $query:q