Freebsd

tcsh grep 麻煩

  • February 28, 2021

我使用 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

引用自:https://unix.stackexchange.com/questions/636825