Bash中的字符串插值

Byt*_*ana 13 string 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 
Run Code Online (Sandbox Code Playgroud)

我只能得到

./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
Run Code Online (Sandbox Code Playgroud)

没有号码.

更正后的代码:

#!/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 
Run Code Online (Sandbox Code Playgroud)

甚至更好:

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

小智 16

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

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

  • 好答案.请注意,$(...)优先于旧的\`... \`.它可能看起来像这样:wget"http://myurl.de/source/image/08_05_27_$(printf"%05d"$ i).jpg" (3认同)

Vil*_*ari 10

你使用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
Run Code Online (Sandbox Code Playgroud)