2016-05-05 3 views
0

ich tun dies in der Regel:Bash passieren alle Argumente als ein zitierte Argument an einen anderen Befehl

git commit -m "My hands are typing words!" 

Ich bin Gettin' müde, dass, so habe ich diese Partie:

@echo off 
set var=%* 
git commit -m "%var%" 

, die als Werke :

commit.bat blah blah blah 

So kann ich die -m und die Zitate fallen, aber es fügt .bat. Wenn ich die Dateierweiterung entferne, versucht Git Bash den Stapel als bash zu interpretieren. Also muss ich stattdessen die Bash-Syntax verwenden. Das ist in Ordnung, ich habe es versucht:

#!/usr/bin/bash 
git commit -m "[email protected]" 

Das funktioniert nicht, es übergibt Argumente als mehrere Argumente. Es ruft dies:

git commit -m My hands are typing words! 

ich noch mehr Zitate hinzuzufügen versucht (git commit -m ""[email protected]""), keine Wirkung.

Also, wie konvertiere ich alle Argumente in eine Zeichenfolge, die in bash an einen anderen Befehl übergeben werden kann?

+4

Verwenden Sie '" $ * "' anstelle von '" $ @ "'. Aber um richtig zu sein, sollten Sie 'commit.sh 'blah blah blah" 'mit doppelten Anführungszeichen um Nachricht verwenden. – anishsane

+0

Die Beseitigung der Notwendigkeit für die Zitate war mein Hauptziel, richtig oder nicht. –

+0

Überprüfen Sie meine Antwort, warum Zitate wichtig sind ... Natürlich, wenn Sie sich nicht darum kümmern, können Sie den Mechanismus "$ *" verwenden. – anishsane

Antwort

1

Sie können "$*" anstelle von "[email protected]" verwenden.
Dieses Beispielskript sollte es erklären:

$ cat a.sh 
#!/bin/bash 
echo '$*:' 
printf "%s\n" $* 
echo 
echo '"$*":' 
printf "%s\n" "$*" 
echo 
echo '[email protected]:' 
printf "%s\n" [email protected] 
echo 
echo '"[email protected]":' 
printf "%s\n" "[email protected]" 

$ ./a.sh a b "c d"    e 
$*: 
a 
b 
c 
d 
e 

"$*": 
a b c d e 

[email protected]: 
a 
b 
c 
d 
e 

"[email protected]": 
a 
b 
c d 
e 

Aber richtig, sollten Sie „$ 1“ & Zitat Ihre Nachricht Zeichenfolge vor der Übergabe an das Skript verwenden.
Im obigen Beispiel können Sie sehen, dass die Leerzeichen zwischen c & d beibehalten werden, aber diejenigen zwischen "c d" & e sind verloren.

+0

Kann der Platzverlust behoben werden, ohne die Eingabe zu quotieren? Windows-Batch hat dieses Problem nicht ... –

+0

@ TomášZato Nein. Die Shell löscht nicht mit Leerzeichen versehene Leerzeichen, bevor der Befehl ausgeführt wird. Wenn 'cmd.exe' das nicht macht, ist das eine Designentscheidung. –

+0

_Windows Batch hat dieses Problem nicht _: Ich würde es nicht als _Problem _ bezeichnen ... – anishsane