如何避免在`eval set ..." $ @"`for getopt中扩展单引号文本?

时间:2018-02-13 11:49:24

标签: bash shell wildcard getopt quoting

我使用传统模式通过getopt执行参数解码:

function mytest {
  eval set -- `getopt --options h --long help -- "$@"`
  echo "1:$1 2:$2"
}

但是当我传递一个带引号的字符串时,它实际上是扩展的,例如:

$ mytest 'x * z'
1:-- 2:<list of files from current dir>

奇怪的是,似乎只有特定结构'<string> * <other_strings>'触发了行为;类似的结构不是:

$ mytest '* z'
1:-- 2:* z
$ mytest 'x *'
1:-- 2:x *

如何按预期进行评估?

2 个答案:

答案 0 :(得分:2)

引用您的扩展以防止发送:

function mytest {
   eval set -- "`getopt --options h --long help -- "$@"`"
   echo "1:$1 2:$2"
}

答案 1 :(得分:0)

因为你在Clicked(date, jsEvent, view) { // do something with new inputs.. alert("Alert from ng func"); } 中使用,所以除了禁用globs之外我没有看到另一个选项(扩展发生在命令实际运行之前。),即:

this