我的bashrc文件中有一个简单的函数,它需要2个参数并进行curl调用。问题是,curl请求没有得到变量。这是函数......
checkUserName() {
cd ~/
echo "checking for username $2"
curl -w "@curl-format.txt" -H "Content-Type: application/json" -X POST -d '{"userName": "$2"}' http://localhost:8080/$1/verify
}
alias unameCheck=checkUserName
然后我用类似的东西来称呼它
unameCheck users danwguy
我会看到......
checking for username danwguy
在我的终端提示符中,但是当我从我的应用程序查看我的日志时,它显示它正在检查userName $ 2 因此,即使正在替换$ 1,变量也不会在curl命令中被替换,因为它在我的localhost上调用了正确的API。 它在echo命令中替换它,但不在curl命令中替换它。
我甚至尝试过创建一个局部变量,但是这仍然不起作用,无论我做什么,它都不会在curl调用中替换,但它在echo调用中会起作用。 任何人都可以理解为什么它不能正确地取代$ 2
答案 0 :(得分:3)
参数扩展($ curl -w "@curl-format.txt" \
-H "Content-Type: application/json" \
-X POST \
-d '{"userName": "'"$2"'"}' \
"http://localhost:8080/$1/verify"
)不会在单引号中展开。改为使用双引号:
[(8,2),(3,2),(3,1),(10,2),(10,6)] :: [(Int,Int)]
还用双引号括起参数扩展以避免word splitting和 pathname expansion
答案 1 :(得分:2)
只是对先前评论的记录。
你可以用反斜杠转义双引号,告诉bash解释器不解释它的特殊含义,所以最终的代码如下:
... -d "{\"userName\": \"$2\"}" ...
这对我来说更明显......