转义bash命令以与curl --data-urlencode一起使用

时间:2014-09-19 17:50:54

标签: bash curl

我正在尝试编写一个将shell命令传递给远程API的bash函数或别名。

具体来说,这就是我目前在.bashrc中所拥有的:

explain () {
  cmd=$(printf "%q " "$@")
  curl -Gs "https://www.mankier.com/api/explain/?format=text&cols="$(tput cols) --data-urlencode "q=$cmd"
}
export -f explain

我可以使用类似的东西:

$ explain ls -lh

但我还没有找到一种方法来处理带参数扩展的命令。几个例子:

$ explain ls -lh $HOME

$HOME已更改为/home/j,但我希望将字符串"ls -lh $HOME"传递给远程API。

$ explain ls -lh *

*已更改为目录内容,但我想将字符串"ls -lh *"传递给远程API。

这可以不转换我想要解释的命令吗?即解释函数中的更改,而不是:explain 'ls -lh *'

1 个答案:

答案 0 :(得分:0)

双引号插入shell变量,正如您在此处看到的那样,$ HOME被其值替换。使用单引号来阻止插值,explain 'ls -lh *'