2016-05-05 4 views
0

別のコマンドに1つの引用された引数として、すべての引数を渡します:バッシュは、私は通常これを行う

commit.bat blah blah blah 

だから私は-mと引用符をドロップすることができますが、それは.batを追加します。ファイル拡張子を削除すると、git Bashはバッチをbashとして解釈しようとします。ですから、代わりにbash構文を使用する必要があります。動作しません

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

が、それは複数の引数として引数を渡します:それは、私がこれを試してみましたが、大丈夫です。それは、これを呼び出す:

git commit -m My hands are typing words! 

私はもっと引用符(git commit -m ""[email protected]"")、無効果を追加しようとしました。

どのように私はすべての引数を別のコマンドにbashで渡すことができる文字列に変換するのですか?

+4

'' $ @ "'の代わりに '' $ * "'を使用してください。しかし正しいためには、 'commit.sh 'を使ってメッセージを二重引用符で囲む必要があります。 – anishsane

+0

引用符の必要性を排除することは私の主な目標であった。 –

+0

引用が重要な理由について私の答えをチェックしてください...もちろん、その理由を気にしなければ、$ * "'メカニズムを使うことができます。 – anishsane

答えて

1

"[email protected]"の代わりに"$*"を使用できます。
このサンプルスクリプトは、それを説明する必要があります。

$ 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 

しかし正確には、スクリプトに渡す前に、あなたのメッセージ文字列を引用&「$ 1」を使用する必要があります。
上記の例では、c & dのスペースは保持されていますが、「c d」& eのスペースは失われています。

+0

入力を引用せずにスペースを忘れることはできますか? Windowsのバッチにはこの問題がありません。 –

+0

@TomášZatoいいえ。コマンドはコマンドが実行される前に、引用符で囲まれていないスペースを削除します。 'cmd.exe'がそれをしないと、それが設計上の選択です。 –

+0

_Windowsバッチにはこの問題はありません_:私は_problem _...と呼びません。 – anishsane

関連する問題