bash中的变量不起作用

时间:2016-12-01 22:27:07

标签: bash curl local-variables

我的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

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 splittingpathname expansion

答案 1 :(得分:2)

只是对先前评论的记录。

你可以用反斜杠转义双引号,告诉bash解释器不解释它的特殊含义,所以最终的代码如下:

... -d "{\"userName\": \"$2\"}"  ...

这对我来说更明显......