Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 将引用的参数传递给shell脚本并保持引用_Linux_Bash_Shell - Fatal编程技术网

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

Linux 将引用的参数传递给shell脚本并保持引用,linux,bash,shell,Linux,Bash,Shell,我正在尝试重新使用发送到脚本的参数作为在脚本中执行的命令的参数。请参见下面的示例,其中我执行mailx bash $./myscript.sh "My quoted Argument" mailx -s $1 myscript.sh $./myscript.sh "My quoted Argument" mailx -s $1 这最终被执行为:mailx-s My Quoted Argument 我尝试了“$1”,但我的引号被扔掉了(陈述不正确,请阅读下面的答案) 我尝试了“$1”,

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

bash

$./myscript.sh "My quoted Argument"
mailx -s $1
myscript.sh

$./myscript.sh "My quoted Argument"
mailx -s $1
这最终被执行为:
mailx-s My Quoted Argument


  • 我尝试了
    “$1”
    ,但我的引号被扔掉了(陈述不正确,请阅读下面的答案)
  • 我尝试了
    “$1”
    ,但我的引号被扔掉了
  • 我试着做
    “$1”
    ,但这是一个很强的引用,所以$1永远不会被解释
  • 我意识到我可以做
    $@
    ,但这给了我每个参数
  • 。。。。你明白了吗

任何帮助都将不胜感激

你能试着这样传递参数吗

$./myscript.sh \"My quoted Argument\"?
mailx-s“$1”
按原样将
$1
的值正确地传递给
mailx
嵌入空格和所有空格

在本例中,这意味着
My Quoted Argument
作为单个文本参数传递给
mailx
,这可能是您的意图

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

如果您真的想传递嵌入的双引号(这是不寻常的),您有两个选项:

  • 或者:在调用时嵌入引号
    /myscript.sh“\“我引用的参数\”
  • 或者:将引号嵌入
    myscript.sh
    mailx-s“\”$1\”

您可以在脚本中的
$1
周围加上转义引号

mailx -s \"$1\"

我希望能够像传递任何普通命令一样传递参数,而不必了解该命令的内部工作原理。也就是说,由于脚本设计的缺陷,我不想修改传递参数的方式。谢谢@mklement0。不知何故,在我的测试中,当我将参数传递给
mailx
时,我一定忽略了在脚本中引用参数。