2015-11-05 17 views
6

スクリプトのパラメータをコマンドのパラメータとして再利用しようとしています。スクリプト内で実行します。私がmailxを実行する以下の例を参照してください。シェルスクリプトに引用された引数を渡して引用符を付ける

バッシュ

$./myscript.sh "My quoted Argument" 

myscript.sh

mailx -s $1 

これは、として実行されてしまう。mailx -s My Quoted Argument


  • 私は"$1"を試してみましたが、私の引用符が捨てられています。 (不正確な声明、以下の回答を読んでください)
  • 私は""$1""を試しましたが、私の引用符は捨てられます。
  • 私は'$1'をしようとしましたが、それは強い引用符なので、$ 1は決して解釈されません。
  • 私は[email protected]を行うことができますが、それは私にすべてのパラメータを与えます。
  • ....あなたは、任意の助けをいただければ幸い絵に

を入手!

答えて

8

mailx -s "$1"のように引数を渡す試すことができます。手元にある場合は

、これはMy Quoted Argumentは、おそらくあなたの意図であるmailxから単一、リテラル引数として渡されることを意味します。シェル・コマンド・ラインで

、文字列リテラルの周りに引用符が構文要素では、コマンドライン(quote removalと呼ばれるプロセス)を解析する過程でシェルによって除去される引数の境界を画定します。

あなたが本当に(珍しいだろう)埋め込ま二重引用符を渡したい場合は、2つのオプションがあります:

  • をどちらかは:呼び出しに./myscript.sh "\"My quoted Argument\""
  • を引用符を埋め込むか:引用符を埋め込みますmyscript.sh内側:mailx -s "\"$1\""
+1

ありがとう@ mklement0。どうにか私のテストでは、私はスクリプトの引数を 'mailx'に渡す際にその引数を見落としてしまったに違いありません。 –

0

あなたは正しく、スペースとすべてを埋め込まれるよう-mailx$1の値を渡し、この

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

。私。私は、スクリプトの設計の欠点のためにパラメータを渡す方法を変更したくない。 –

0

あなたは自分のスクリプトで$1周りエスケープ引用符を置いてもよい

mailx -s \"$1\" 
私はそのコマンドの内部の仕組みを理解することなく、任意の通常のコマンドに私と同じように引数を渡すことができるようにしたいと思い
関連する問題