分享一个shell 中的一个小技巧, 动态改变字符串中的一些值, 通过变量的方式 传入进去 .
举个例子: 我希望 一个字符串可以解析一个变量 的值. 比如 num=10
num=10
string='I am ${num}'
echo $string # I am 10
shell 中 如何 在 单引号的字符串中传递变量
# test1.sh
#!/bin/bash
num=100
echo "num:${num}"
sentence='hello ,I am frank.${num}'
echo "${sentence}"
结果如下:
$ sh test1.sh
num:100
hello ,I am frank.${num}
期望 打印 num 为100 , 但是 却打印了原生的字符串, 如果 希望 把num 的值 解析到字符串里面. 可以在 ${num} 添加单引号 ,注意这里 是单引号.
# cat test.sh
num=100
echo "num:${num}"
sentence='hello ,I am frank.'${num}''
echo "sentence:${sentence}"
结果如下:
$ sh test1.sh
num:100
sentence:hello ,I am frank.100
注意 以上 sentence 变量 是 单引号的字符串, 所以要想 把变量传入到单引号的字符串 里面, 可以 使用 ‘’ 将变量括起来 就可以传递进来.
#!/bin/bash
num=100
echo "num:${num}"
sentence="hello ,I am frank.${num}"
echo "sentence:${sentence}"
$ sh test.sh
num:100
sentence:hello ,I am frank.100
这种 是可以正常解析的. 如果 你想 让其显示 是 ‘100’ 这样的 话, 可以直接 在变量的时候 加上单引号,
#!/bin/bash
num=100
echo "num:${num}"
sentence="hello ,I am frank.'${num}'"
echo "sentence:${sentence}"
结果 如下:
$ sh test.sh
num:100
sentence:hello ,I am frank.‘100’
比如 用 curl 发起一个 post 请求. 需要 在body 里面传入一些值, 这些值 我想通过 变量的形式传入进去
在 body 里面 有一个参数 是 手机号, 我想通过我生成一个变量传入到 body 中 来改变 手机号的值 .
curl 中 参数 -d, --data DATA HTTP POST 数据
-d, --data
(HTTP) Sends the specified data in a POST request to the HTTP server, in the same way that a browser does when a user has filled in an HTML form and presses the submit button. This will cause curl to
pass the data to the server using the content-type application/x-www-form-urlencoded.
(HTTP)将POST请求中的指定数据发送到HTTP服务器,就像用户填写HTML表单并按下提交按钮时浏览器一样。 这将导致curl 使用content-type application / x-www-form-urlencoded将数据传递到服务器。
来看一下 下面的脚本
#!/bin/bash
# test_request.sh
for i in `seq 10 200 `;do
num=$(( $i % 100 ))
curl -X POST \
http://aaaa.bbbbbbb.cn/data_service/element \
-H 'Content-Type: application/json' \
-d '{
"context": {
"id_card_number": "1312341234123412",
"mobile": "123278605'${num}'",
"name": "张三四",
"age":18,
"decision_time": "2018-10-26 10:33:09"
},
"element_id": "Frank_Test_Model_Prob"
}'
done
这里就需要 用 ‘’ 把 ${num} 括起来,这样才能识别num, -d 才能够 识别这个参数.
在shell 脚本中 单引号和双引号 是有点区别的. 如果 要在字符串中传递 shell变量, 对于单引号的 的字符串 想要传递变量需要加上单引号. 而双引号不用,直接引用变量 即可解析变量.
在 python 中, 单引号几乎等于双引号的,在shell 编程中这一点却不一样.