将引用的parameter passing给shell脚本并保持引用

我试图重新使用发送到我的脚本的参数作为我脚本中执行的命令的参数。 看下面的例子,我执行mailx

庆典

 $./myscript.sh "My quoted Argument" 

myscript.sh

 mailx -s $1 

这最终被执行为: mailx -s My Quoted Argument


  • 我尝试了"$1" ,但我的报价被扔掉了。 (错误的语句,请阅读下面的答案)
  • 我试过""$1""但是我的报价被扔掉了。
  • 我试图做'$1'但这是强烈的引用,所以1美元永远不会得到解释。
  • 我意识到我可以做$@ ,但是这给了我所有的参数。
  • ….你得到的图片

任何帮助,将不胜感激!

Solutions Collecting From Web of "将引用的parameter passing给shell脚本并保持引用"

mailx -s "$1"正确地将mailx -s "$1"的值正确传递给mailx ,嵌入的空格和全部。

在这种情况下,这意味着My Quoted Argument作为一个单一的文字参数传递给mailx ,这可能是您的意图。

在shell命令行中,围绕字符串的引号是语法元素,用于标定在解析命令行的过程中被shell 删除参数边界 (称为引用删除的过程)。

如果你真的想通过嵌入双引号(这将是不寻常的),你有2个选项:

  • 要么:嵌入引号调用./myscript.sh "\"My quoted Argument\""
  • 或者:在myscript.sh嵌入引号: mailx -s "\"$1\""

您可能只需在脚本中将转义引号放在$1左右

 mailx -s \"$1\" 

你能尝试像这样传递参数吗?

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