【问题标题】:jq - How to escape ' * ' (special character) in shell script?jq - 如何在 shell 脚本中转义“*”(特殊字符)?
【发布时间】:2017-02-28 02:17:36
【问题描述】:

我在 shell 脚本中使用以下命令

echo $(jq -n '"1\n2\n3" | gsub("\n"; @t " * ")')

预期的输出是

"1 * 2 * 3" 

但在 shell 脚本中,它会将 '\n' 替换为相应目录中的所有文件名(即 '*' 在此上下文中被视为特殊参数)。

1 file1 file2 2 file1 file2 3

当我们在终端中执行相同的操作时,它会给出预期的输出。

谁能帮我解决这个问题?

【问题讨论】:

  • 你试过引用替换吗?
  • @IgnacioVazquez-Abrams 哦,天哪,我错过了。添加后它起作用了。谢谢
  • 你为什么要使用echo?只需运行jq

标签: bash shell sh jq


【解决方案1】:

您需要引用命令替换以防止结果 (1 * 2 * 3) 进行路径名扩展。

echo "$(jq -n '"1\n2\n3" | gsub("\n"; @t " * ")')"

但请记住,如果您对命令执行的唯一操作是将其作为唯一参数传递给echo,则没有理由捕获命令的输出。让命令自己运行。

$ echo "$(jq -n '"1\n2\n3" | gsub("\n"; @t " * ")')"
"1 * 2 * 3"
$ jq -n '"1\n2\n3" | gsub("\n"; @t " * ")'
"1 * 2 * 3"

(作为奖励,如果您不捕获输出,jq 可能会产生彩色输出。)

【讨论】:

  • 我面临着同样的奇怪问题,声明 cron 表达式要传递给 rest API curl 调用,“0 0 9 * * ?”转换为“0 0 9 somestring somestring?”我正在使用 jq 库。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多