Sie müssen sich mit den Grundregeln für die Shell-Erweiterung von Variablen vertraut machen.
NAME="start"
Wenn Sie der Shell $ NAME präsentieren, wird es auf den String- Start erweitert
Wenn Sie eine Zeichenfolge in einfache Anführungszeichen setzen, wird die Shell nicht in den einfachen Anführungszeichen erweitert, sodass '$ NAME' als $ NAME bleibt
Bei doppelten Anführungszeichen erweitert die Shell die Variable $ NAME auf den Zeichenfolgenstart , aber die doppelten Anführungszeichen verhindern das sogenannte Dateiglobbing.
Was ist File Globbing, das Sie fragen?
Nun, das tust du
ls -l *
Sie erwarten, dass der Befehl ls alle Dateien auflistet. Es ist nicht ls, das * in alle Dateinamen im Verzeichnis konvertiert, sondern die Shell.
Angenommen, Sie hatten eine Datei mit dem Namen * in Ihrem Verzeichnis und wollten diese Datei nur auflisten, dann können Sie beide verwenden
ls -l '*'
oder
ls -l "*"
und sowohl einfache als auch doppelte Anführungszeichen verhindern, dass die Shell das * auf die Liste der Dateien erweitert.
Das Globbing kann auch dadurch deaktiviert werden
set noglob
Anstatt diese einfache Suchzeichenfolge als separates Shell-Skript zu verwenden, bei dem bei jeder Verwendung eine neue Shell aufgerufen werden muss, können Sie sie effizienter als Shell-Funktion fs (find_string) erstellen.
function fs ()
{
\find . -type f -name "${1}" -exec egrep --color "${2}" {} /dev/null \;
}