nehmen wir an, dies ist die Zeichenfolge:
'a',"b"
es enthält sowohl einfache als auch doppelte Anführungszeichen.
wie würden Sie dies als einzelne Zeichenfolge an ein Bash-Skript übergeben?
Dies ist das Bash-Skript:
#!/bin/bash
echo $1
es muss widerhallen
'a',"b"
aber wir können nicht davon ausgehen, dass die Zeichenfolge so klein ist. Letztendlich habe ich vor, das Ganze zu senden
/etc/httpd/conf/httpd.conf
als Zeichenfolge zu diesem Bash-Skript.
daher kann ich Anführungszeichen und einfache Anführungszeichen nicht wirklich einzeln entkommen.
Antwort1
Sie könnenBefehlsersetzung:
oo.sh "$(cat /etc/httpd/conf/httpd.conf)"
Dies wird ausgeführt cat /etc/httpd/conf/httpd.conf
und die Ausgabe (der Inhalt der Datei) wird in das erste an übergebene Argument eingefügt oo.sh
. Es ist in Anführungszeichen gesetzt, sodass es als einzelnes Argument übergeben wird – Leerzeichen und Sonderzeichen werden unverändert durchgelassen. oo.sh
erhält ein einzelnes Argument.
Generell könnte es jedoch besser sein, wenn möglich den Dateinamen an das Skript zu übergeben oder den Dateiinhalt als Standardeingabe ( oo.sh < /etc/httpd/conf/httpd.conf
) anzugeben. Abgesehen davon, dass es standardmäßiger ist, gibt es eine maximale Länge, die alle Befehlszeilenargumente zusammen haben können, und eine Datei kann länger sein. Selbst wenn es jetzt funktioniert, wird die Übergabe des Ganzen als Argument irgendwann nicht mehr funktionieren, wenn die Datei mit der Zeit größer wird und der Fehler „Argumentliste zu lang“ auftritt.
Sie können dieses Limit mit finden getconf ARG_MAX
. Die Größe variiert erheblich: Ich habe hier Systeme mit 2 MB-Limits und 256 KB-Limits. Wenn Ihre Datei immer klein sein wird, brauchen Sie sich keine Sorgen zu machen, aber andernfalls sollten Sie versuchen, die Daten auf eine andere Weise in das Skript zu bekommen.