Freebsd
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 中獲取它提供給我的字元串?
這不是問題
grep
- 這是未引用的變數擴展的問題echo $query
grep
以及返回的匹配行包含萬用字元這一事實*
。在tcsh
中,不成功的 glob 的預設行為類似於 bash 的failglob
選項 - 錯誤告訴您 passwd 字元串沒有文件名匹配:$ 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