Ich kann nicht glauben, dass ich 1,5 Stunden mit etwas so Trivialem verbracht habe. Ich schreibe ein sehr einfaches Shell-Skript, das eine Datei greps, die Ausgabe in einer Variablen speichert und die Variable in STDOUT ausgibt.
Ich habe den Befehl grep mit dem Regex in der Befehlszeile überprüft, und es funktioniert gut. Aus irgendeinem Grund funktioniert der Befehl grep jedoch nicht innerhalb des Shell-Skripts.
Hier ist das Shell-Skript, das ich aufgeschrieben habe:
%Vor% Ich habe das mit dem folgenden Befehl ausgeführt: ./myScript.sh testingFile
. Es druckt nur eine leere Zeile.
/bin
enthält. echo $SHELL
gibt /bin/bash
tt=grep 'test' ""
echo ${tt}
tt=grep 'test' testingFile
dos2unix
, um mögliche Wagenrückläufe zu entfernen. tt=grep -oE 'test' testingFile
, erhalte ich die Fehlermeldung: ./out.sh: line 3: -oE: command not found
. Sie müssen die Befehlsersetzung verwenden:
%Vor%Mit der Befehlsersetzung kann die Ausgabe eines Befehls den Befehl selbst ersetzen. Befehlsersetzung tritt auf, wenn ein Befehl wie folgt eingeschlossen ist:
%Vor%oder wie das mit Backticks:
%Vor%Bash führt die Erweiterung aus, indem er COMMAND ausführt und die Befehlsersetzung durch die Standardausgabe des Befehls ersetzt, wobei alle nachfolgenden Zeilenumbrüche gelöscht werden. Eingebettete Zeilenumbrüche werden nicht gelöscht, aber sie können während der Worttrennung entfernt werden.
Die $()
Version wird normalerweise bevorzugt, da sie das Verschachteln ermöglicht:
Weitere Informationen finden Sie im Abschnitt command substitution
in man bash
.