我正在尝试重新使用发送到我脚本的参数作为我在我的脚本中执行的命令的参数。请参阅下面的示例,我执行mailx
。
的bash
$./myscript.sh "My quoted Argument"
myscript.sh
mailx -s $1
最终执行:mailx -s My Quoted Argument
。
"$1"
,但是我的引言被丢掉了。 (不正确的陈述,请阅读以下答案) ""$1""
,但我的引号被丢弃了。'$1'
,但这是强烈的引用,所以$ 1永远不会被解释。 $@
,但这给了我每一个参数。任何帮助将不胜感激!
答案 0 :(得分:8)
mailx -s "$1"
正确地将$1
的值正确传递给mailx
,嵌入空格和所有内容。
就目前的情况而言,这意味着My Quoted Argument
作为单个,文字参数传递给mailx
,这可能是您的意图。
在shell命令行中,字符串文字周围的引号是语法元素划分参数边界,它们在shell的过程中被删除解析命令行(一个名为quote removal的进程)。
如果你真的想传递嵌入式双引号(这很不寻常),你有两个选择:
./myscript.sh "\"My quoted Argument\""
myscript.sh
:mailx -s "\"$1\""
答案 1 :(得分:0)
你能尝试传递这样的论点吗
$./myscript.sh \"My quoted Argument\"?
答案 2 :(得分:0)
您可以在脚本
中的$1
周围放置转义引号
mailx -s \"$1\"