tcsh grep 麻烦

tcsh grep 麻烦

我使用 FreeBSD

> uname -sr
FreeBSD 6.3-RELEASE

当我查询时

> grep `whoami` /etc/passwd

它显示了我想要的信息:

在此输入图像描述

但是当我尝试将其放入 tcsh 脚本中时:

#!/bin/tcsh
set login = `whoami`
echo $login

set query = `grep $login /etc/passwd`
echo $query

它给我带来了以下几点:

dolg_gr
echo: No match.

为什么“不匹配”?如何在 $query 变量中的命令 shell 中获取它为我提供的字符串?

答案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

相关内容