将引用的参数传递给shell脚本并保持引用

Rya*_*ith 7 linux bash shell

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

庆典

$./myscript.sh "My quoted Argument"
Run Code Online (Sandbox Code Playgroud)

myscript.sh

mailx -s $1
Run Code Online (Sandbox Code Playgroud)

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


  • 我试过了"$1",但我的报价被扔掉了.(不正确的陈述,请阅读下面的答案)
  • 我试过""$1""但是我的报价被扔掉了.
  • 我试着这样做,'$1'但这是强烈的引用,所以1美元永远不会得到解释.
  • 我意识到我能做到$@,但这给了我每一个参数.
  • ....你得到了照片

任何帮助,将不胜感激!

mkl*_*nt0 8

mailx -s "$1"正确地将值传递$1mailx原样,嵌入空格和所有.

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

在shell命令行中,字符串文字周围的引号是划分参数边界的语法元素,这些参数边界在解析命令行的过程中被shell 删除(称为引用删除的过程).

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

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