包括字符串中的变量,Bash脚本

时间:2015-12-16 06:53:47

标签: bash scripting

我需要将变量插入到字符串中以创建URL。现在,我循环遍历一组值并将它们插入到字符串中。

year="2015"
for i in "${array[@]}"
do
    url="https://www.my-website.com/place/PdfLinkServlet?file=\place\\$i\099%2Bno-display\\$year_$i.pdf"
    echo $url
done

$ i正在被相应的数组元素替换,但$ year只留下一个空格。有人可以解释为什么以及如何获取看起来像这样的网址:url =“https://www.my-website.com/place/PdfLinkServlet?file=\place\place_id\099%2Bno-display\2015_place_id.pdf”

3 个答案:

答案 0 :(得分:4)

因为变量名称可以合法地包含_个字符,所以Bash无法知道您想要$year而不是$year_。要消除歧义,可以使用括号中的变量名称,如下所示:

${year}_${i}.pdf

在你将变量扩展推到一起的任何时候都这样做是不错的做法。正如你所看到的,它实际上也使它们在人眼中更加突出。

答案 1 :(得分:1)

改为使用${var}

year="2015"
for i in "${array[@]}"; do
    url="https://www.my-website.com/place/PdfLinkServlet?file=place${i}099%2Bno-display${year}_${i}.pdf"
    echo "$url"
done

答案 2 :(得分:0)

这是一个也很好的小黑客。我经常将它用于我的项目。在变量年份中将_添加到2015年底    像year="2015_" 并从url变量中删除_并将i和year这两个变量连接起来,如$year$i

我添加了一个任意数组,以便脚本可以运行。

#!/bin/bash
year="2015_"
array=(web03 web04 web05 web06 web07)
for i in "${array[@]}";
do
url="https://www.my-website.com/place/PdfLinkServlet?file=\place\\$i\099%2Bno-display\\$year$i.pdf"
echo $url
done