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変数のコマンドシェルで提供される文字列をどのように取得しますか?

ベストアンサー1

それは問題ではありませんgrep。引用符で囲まれていない変数の拡張に問題があります。

echo $query

grepそして返された一致する行にワイルドカード文字が含まれているという事実*。でtcsh失敗したglobのデフォルトの動作はbashのfailglobオプションと似ています。エラーはglobがないことを知らせます。ファイル名の一致パスワード文字列の場合:

$ tcsh -c 'echo dol_gr:*:3291'
echo: No match.

ステファン・チャゼラスが述べたように、(t)cshで変数の拡張を参照する正しい方法はmodifiersを使用することですq。また、引用しない場合はSPC、TAB、およびNLで分割が発生しtcshますが、引用されている場合はNLでのみ発生します。`...`

set query = "`grep $login:q /etc/passwd`"
echo $query:q

おすすめ記事