2015-11-05 11 views
6

Ich versuche Parameter wieder zu verwenden, die an mein Skript als Parameter für einen Befehl gesendet werden, den ich innerhalb meines Skripts ausführe. Siehe Beispiel unten, wo ich mailx ausführen. mailx -s My Quoted Argument:Übergeben Sie Argumente in Anführungszeichen an Shellskript und führen Sie das Anführungszeichen

bash

$./myscript.sh "My quoted Argument" 

myscript.sh

mailx -s $1 

Dieser endet als ausgeführt.


  • Ich versuchte "$1", sind aber meine Zitate weggeworfen. (Falsche Aussage, lesen Sie die Antwort unten)
  • Ich versuchte ""$1"", aber meine Zitate sind weggeworfen.
  • Ich habe versucht, '$1' tun, aber das ist stark zitiert, damit $ 1 nie interpretiert wird.
  • Ich weiß, ich kann [email protected] tun, aber das gibt mir jeden param.
  • .... Sie erhalten das Bild

Jede Hilfe wäre dankbar!

Antwort

8

mailx -s "$1" korrekt den Wert von $1 zu mailx geht wie sie ist, eingebettete Leerzeichen und alle.

Im gegenständlichen Fall Seits bedeutet dies, dass My Quoted Argument als einzige übergeben wird, wörtliches Argument mailx, was wohl Absicht Ihrer ist.

In einem Shell-Befehlszeile Anführungszeichen Stringliterale syntaktischen Elementeabgrenzenden Argument Grenzen sind, die von der Schale in den Prozess der Analyse der Befehlszeile (ein Prozess quote removal genannt) entfernt werden.die Zitate einbetten:

Wenn Sie wirklich, Sie haben 2 Möglichkeiten eingebettet doppelte Anführungszeichen (das wäre ungewöhnlich), übergeben wollte:

  • entweder einbetten die Anführungszeichen beim Aufruf ./myscript.sh "\"My quoted Argument\""
  • oder innen myscript.sh: mailx -s "\"$1\""
+1

Danke @ mklement0. Irgendwie muss ich in meinen Tests übersehen haben, dass ich das Argument in meinem Skript zitierte, wenn ich es an "mailx" weitergab. –

0

Können Sie versuchen, vorbei das Argument wie dieses

$./myscript.sh \"My quoted Argument\"? 
+1

Ich möchte in der Lage sein, Argumente wie bei jedem normalen Befehl zu übergeben, ohne die inneren Abläufe dieses Befehls verstehen zu müssen. I.e. Ich möchte nicht ändern, wie ich Parameter übergebe, wegen eines Mangels des Drehbuchentwurfs. –

0

können Sie nur entkommen Anführungszeichen $1 in Ihrem Skript setzen

mailx -s \"$1\" 
Verwandte Themen