Um die Literal Frage zu beantworten, können Sie einen umgekehrten Schrägstrich verwenden, um literale doppelte Anführungszeichen in Ihrem Befehl zu umgehen. Jedoch aus den genannten Gründen in BashFAQ #50 ist dies überaus schlechte Praxis:
# Avoid this absent a very good reason
grep_cmd_str="grep -Po '(?<=Fingerprint=)[^\"]*'"
eval "$grep_cmd_str" <file1.txt # eval is necessary, with all the issues that implies
Bessere Praxis, wenn Sie einen einfachen Befehl speichern müssen (ohne Umleitungen oder anderen Shell-Konstrukte) [1] in a Variable ist ein Array [2], nicht eine skalare Variable zu verwenden, seine Argumente zu halten:
# Use this principally if you need to dynamically build up an argument list
grep_args=(grep -Po '(?<=Fingerprint=)[^"]*')
"${grep_args[@]}" <file1.txt
Wenn Sie keine constra haben Ints, die Sie benötigen entweder der oben zu verwenden, sollten Sie eine Funktion (die Umleitungen erlauben tut und Shell baut, solange sie fest einprogrammiert sind):
# Use this whenever possible, in preference to the above
grep_fp() { grep -Po '(?<=Fingerprint=)[^"]*' "[email protected]"; }
grep_fp <file1.txt
[1] - Nicht Bewertung Schale In diesem Zusammenhang ist Konstrukte eine Sicherheitsfunktion: Sie schützt Sie vor bösartigen Dateinamen oder ähnlichen Inhalten in Werten, die in den Wert, den Sie als Befehl verwenden, eingefügt wurden.
[2] - Beachten Sie, dass Arrays in POSIX sh nicht verfügbar sind, für die Ihre Frage auch markiert ist. Das heißt, ähnliche Funktionalität ist durch Überschreiben von "[email protected]"
verfügbar (vermutlich in einem begrenzten Bereich, z. B. einer Funktion, so dass der ursprüngliche Wert beibehalten wird).
Dies ist wohlverdoppelt von http://stackoverflow.com/questions/2005192/how-to-execute-a-bash-command-stored-as-a-string-with-quotes-and-asterisk –
.. .btw, bash und POSIX sh unterscheiden sich in einigen recht relevanten Aspekten (die Bourne-Shell unterscheidet sich noch weiter, ist aber bei allem, was Red Hat jemals ausgeliefert hat, nicht vorhanden, so dass Ihre Tags dies ausschließen). Ich habe einen Bash-Only-Abschnitt in meine Antwort aufgenommen, aber wenn Sie nur nach einem der beiden Tags suchen, wäre es klarer gewesen, ob das akzeptabel war. –