变量在bash中不起作用
问题描述:
我在我的bashrc文件中有一个简单的函数,它需要2个参数并进行卷曲调用。问题是,curl请求没有获取变量。这里的功能...变量在bash中不起作用
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命令中的变量也没有被替换,因为它调用了正确的A PI在我的本地主机上。 它在echo命令中替换它,但不在curl命令中。
我甚至尝试过创建一个局部变量,但是这仍然不起作用,不管我做什么,它都不会在curl调用中取代,但它在echo调用中。 任何人都可以看到为什么它不会正确地取代$ 2
答
参数扩展($var
)不会用单引号扩展。使用双引号来代替:
$ curl -w "@curl-format.txt" \
-H "Content-Type: application/json" \
-X POST \
-d '{"userName": "'"$2"'"}' \
"http://localhost:8080/$1/verify"
而且包装参数扩展在双引号以避免word splitting和 pathname expansion。
答
只是注释以前的评论。
可以逃脱双引号反斜杠,告诉bash的解释不解释它的特殊意义,所以最终代码看起来像:
... -d "{\"userName\": \"$2\"}" ...
哪个方式对我来说更明显...
好回答;术语可疑:'$ var'是一个参数_(变量)的引用。认识到引用并用参数的值替换它就是所谓的_parameter expansion_。 同样,您避免_unquoted references_参数(或未加引号的命令替换/算术扩展)来防止分词和路径名扩展。 – mklement0