繁体   English   中英

Bash中的字符串插值

[英]String interpolation in Bash

我的密码

#!/bin/bash
for (( c=0; c<=1127; c++ ))
do
id = 9694 + c
if (id < 10000); then
    wget http://myurl.de/source/image/08_05_27_0${id}.jpg
else 
    wget http://myurl.de/source/image/08_05_27_${id}.jpg
fi
done 

我只会

./get.sh: line 5: 10000: No such file or directory
--2009-05-06 11:20:36--  http://myurl.de/source/image/08_05_27_.jpg

没有数字。

更正的代码:

#!/bin/bash
for (( c=0; c<=1127; c++ ))
do
id=$((9694+c))
if (id -lt 10000); then
    wget http://myurl.de/source/image/08_05_27_0${id}.jpg
else 
    wget http://myurl.de/source/image/08_05_27_${id}.jpg
fi
done 

甚至更好:

for i in $(seq 9694 10821) ; do
    _U=`printf "http://myurl.de/source/image/08_05_27_%05d.jpg" $i`
    wget $_U 
done

我会选择更简单的解决方案

for i in $(seq 9694 10821) ; do
    _U=`printf "http://myurl.de/source/image/08_05_27_%05d.jpg" $i`
    wget $_U 
done

您在使用bash语法时会犯几个错误,尤其是在处理算术表达式时。

  • 分配给变量时,不能在=号前后加上空格。
  • 在“ id”的赋值中,要调用算术求值,您需要使用$((expression))语法。
  • 对于“ if”条件,就像使用“ for”一样,您需要双括号。

这应该工作:

#!/bin/bash
for (( c=0; c<=1127; c++ )); do
  id=$((9694 + c))
  if ((id < 10000)); then
    wget http://myurl.de/source/image/08_05_27_0${id}.jpg
  else
    wget http://myurl.de/source/image/08_05_27_${id}.jpg
  fi
done

这就是你所需要的。

#!/bin/bash
for (( c=0; c<=1127; c++ ))
do
    ((id = 9694 + c))
    if [[ id -lt 10000 ]] ; then
        wget http://myurl.de/source/image/08_05_27_0${id}.jpg
    else 
        wget http://myurl.de/source/image/08_05_27_${id}.jpg
    fi
done

你需要:

id=$((9694+c))
...
if [[ id < 10000 ]]; then

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM