我正在编写一个 bash 脚本来自动化我的下载过程。在一个部分中,它给出了一个错误:
意外标记 `newURL=$(echo $URL | sed 's/&:/$index/')' 附近的语法错误
那段代码在这里:
# Downloading the pdf's.
for index in {$startedNumber..$endedNumber} do
newURL=$(echo $URL | sed 's/&:/$index/')
wget $newURL
done
本节处理类似“ http://xxxx.com/xxx/yyy/zzz&:.pdf ”的 URL 并找到“&:”部分。当它发现时,它会将其更改为 $index。这样我就可以下载这些行: http://xxxx.com/xxx/yyy/zzz1.pdf http://xxxx.com/xxx/yyy/zzz2.pdf http://xxxx.com/xxx/yyy/ zzz3.pdf http://xxxx.com/xxx/yyy/zzz4.pdf(......一直持续到de $endedNumber)
我应该怎么做才能解决这个问题?
do
关键字应该在新行上或在;
.个人经验的一般经验法则,当错误被报告为接近意外标记时,始终查看它之前的代码(不仅仅是在 bash 中)
除了当前答案中解决的问题外,这里还有一些问题
bash 不(直接)支持在大括号扩展中使用 shell 变量。参见例如
eval
吗?$index
不会扩展,因为您的 sed 表达式是单引号的。参见例如避免使用全大写变量名,不要忘记双引号变量扩展
事实上,您根本不需要
sed
,因为 shell 本身可以直接对变量进行简单的搜索和替换。所以例如(删除
echo
您的真实案例)。