2015-11-05 51 views
6

我試圖重新使用發送給我的腳本的參數作爲參數執行我的腳本中的。看下面的例子,我執行mailxmailx -s My Quoted Argument將引用的參數傳遞給shell腳本並維護引用

的bash

$./myscript.sh "My quoted Argument" 

myscript.sh

mailx -s $1 

這最終成爲被執行。


  • 我試過"$1",但我的報價都扔掉了。 (錯誤的陳述,閱讀下面的答案)
  • 我試過""$1""但我的報價被扔掉。
  • 我試着做'$1'但是這是強烈的引用,所以$ 1永遠不會被解釋。
  • 我意識到我可以做[email protected],但那給了我每一個參數。
  • ....你得到的圖片

任何幫助,將不勝感激!

回答

8

mailx -s "$1"正確傳遞原來的樣子,嵌入的空格和所有的$1mailx值。

在手頭的情況下,這意味着My Quoted Argument被作爲,文字參數mailx,這可能是你的意圖傳遞。

在外殼命令行中,引號字符串文字是句法元件劃分被通過在解析命令行(該過程稱爲quote removal)的過程中,殼移除參數邊界

如果你真的想通過嵌入式雙引號(這將是不尋常的),你有兩個選擇:

  • 之一:嵌入報價上調用./myscript.sh "\"My quoted Argument\""
  • 或:嵌入報價裏面myscript.shmailx -s "\"$1\""
+1

謝謝@ mklement0。不知何故,在我的測試中,我一定忽略了在將腳本傳遞給'mailx'時引用了腳本中的參數。 –

0

你可以嘗試通過論證這樣

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

我希望能夠將參數傳遞給任何常規命令,而無需瞭解該命令的內部工作原理。即由於腳本設計的缺陷,我不想修改傳遞參數的方式。 –

0

你可能只是把逃脫引號$1在腳本

mailx -s \"$1\"