将引用的参数传递给shell脚本并维护引用

时间:2015-11-05 22:52:52

标签: linux bash shell

我正在尝试重新使用发送到我脚本的参数作为我在我的脚本中执行的命令的参数。请参阅下面的示例,我执行mailx

的bash

$./myscript.sh "My quoted Argument"

myscript.sh

mailx -s $1

最终执行:mailx -s My Quoted Argument

  • 我试过了"$1",但是我的引言被丢掉了。 (不正确的陈述,请阅读以下答案)
  • 我试过""$1"",但我的引号被丢弃了。
  • 我试图做'$1',但这是强烈的引用,所以$ 1永远不会被解释。
  • 我意识到我可以做$@,但这给了我每一个参数。
  • ....你得到了照片

任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:8)

mailx -s "$1"正确地将$1的值正确传递给mailx,嵌入空格和所有内容。

就目前的情况而言,这意味着My Quoted Argument作为单个,文字参数传递给mailx,这可能是您的意图。

在shell命令行中,字符串文字周围的引号是语法元素划分参数边界,它们在shell的过程中被删除解析命令行(一个名为quote removal的进程)。

如果你真的想传递嵌入式双引号(这很不寻常),你有两个选择:

  • :在引用./myscript.sh "\"My quoted Argument\""
  • 上嵌入引号
  • 或:在myscript.shmailx -s "\"$1\""
  • 中嵌入引号

答案 1 :(得分:0)

你能尝试传递这样的论点吗

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

答案 2 :(得分:0)

您可以在脚本

中的$1周围放置转义引号
mailx -s \"$1\"