我如何在bash函数的字符串中使用参数

时间:2019-03-19 09:01:14

标签: string bash function arguments

我尝试:

ctests() {
    curl -X POST \
        http://route.to.host/cucumber/execute-tests \
        -H 'Authorization: Basic xxxxxxxxxxxxxxxxxxxxx' \
        -H 'Content-Type: application/json' \
        -H 'cache-control: no-cache' \
        -d '{ "text": "cucumber! alltests products=$1" }'
}

并想这样称呼

> ctests someproduct

但是1美元不会解决。我尝试了$ {1},但还是一样。 有一个好的解决方案吗?

1 个答案:

答案 0 :(得分:2)

$1无法解析,因为您使用的是单行',它禁止可变分辨率。

改为使用双引号(")(您必须在双引号内转义双引号;或在双引号内使用单引号;具体取决于您的上下文)

ctests() {
    curl -X POST \
        http://route.to.host/cucumber/execute-tests \
        -H 'Authorization: Basic xxxxxxxxxxxxxxxxxxxxx' \
        -H 'Content-Type: application/json' \
        -H 'cache-control: no-cache' \
        -d "{ \"text\": \"cucumber! alltests products=$1\" }"
}

引用bash(1)

  

QUOTING

     

[...]

     

将字符括在单引号中可保留引号内每个字符的字面值。即使在前面加上反斜杠,也不能在单引号之间引起单引号。

     

用双引号引起来的字符将保留引号中所有字符的文字值,但$ [...]