shell脚本中如何在字符串中传递变量
⽂章⽬录
摘要: 如何在shell 脚本中传递解析变量的值.
分享⼀个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 变量 是 单引号的字符串, 所以要想 把变量传⼊到单引号的字符串 ⾥⾯, 可以 使⽤ ‘’ 将变量括起来 就可以传递进来.
⼀种情况字符串本⾝⽤双引号
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 brow
ser 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将数据传递到服务器。
来看⼀下 下⾯的脚本
# test_request.sh
for i in`seq 10 200 `;do
num=$(( $i % 100 ))
curl -X POST \
aaaa.bbbbbbb/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变量, 对于单引号的 的字符串 想要传递变量需要加上单引号.⽽双引号不⽤,直接引⽤变量 即可解析变量.
curl命令发送post请求带参数在 python 中, 单引号⼏乎等于双引号的,在shell 编程中这⼀点却不⼀样.
分享快乐,留住感动. '2019-08-25 19:05:58' --frank
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论