2009-11-02 5 views
0

Je suis en train de trouver où deux variables sont concaténées dans un répertoire de scripts, mais quand je les opérations suivantes:

grep -lire "$DATA_PATH . $AWARDS_YEAR" * 

J'obtiens des erreurs « variable non définie » ...

Je pensais que Je pouvais échapper au $ s en utilisant:

grep -lire "\$DATA_PATH . \$AWARDS_YEAR" * 

mais je reçois la même erreur - alors, comment voulez-vous grep pour les chaînes avec $ s?

Répondre

6

Tcsh est un peu différent des variables habituelles, et c'est par défaut sur FreeBSD.

Ainsi, il suffit d'utiliser des guillemets simples, '$VAR', ou échapper à la $ en dehors des citations: \$"VAR"

+0

L'utilisation de guillemets simples est la solution la plus portable: elle fonctionne sur la plupart des shells sous Unix systèmes similaires. (Windows est une discussion séparée.) –

+0

qui a fait l'affaire - merci – HorusKol

2

Mettez entre guillemets simples, avec la barre oblique échapper:

grep -lire '\$DATA_PATH . \$AWARDS_YEAR' * 

Notez également que le point est un caractère regex (.). Si vous ne le voulez pas, échappez-le aussi (ou n'utilisez pas l'option -e). Il s'agit d'un nice reference avec plus d'informations générales.

+0

En fait, en utilisant ' '\ $ VAR'' produira une chaîne avec une vraie barre oblique inverse dans chaque coquille I Je suis conscient de, y compris tcsh, qui est la valeur par défaut sur son système FreeBSD. Le backslash n'empêchera pas son grep de fonctionner mais je dois penser que ce n'était pas prévu .. – DigitalRoss

+0

Je pense que c'est ce que nous voulons ici - un backslash réel avec un signe du dollar réel à passer comme une regex –

+0

Ok, si c'est vraiment ce que tu voulais dire. J'ai enlevé le downvote. (A dû éditer votre réponse pour le faire.) Mais rappelez-vous que '$' n'est pas magique pour grep excepté à la fin du modèle. – DigitalRoss

Questions connexes