0

次のように実行される次のスクリプトがあります。

>> bash test.sh < 0 0

test.sh の内部

read $sni
read $snf

echo 'Run between '$sni' and '$snf
for i in {sni..snf}
do

done

しかし、次のエラーが表示されます。

test.sh: line 14: [: {sni..snf}: integer expression expected
test.sh: line 19: [: {sni..snf}: integer expression expected

ループ変数を整数にする方法は? ありがとう。

4

3 に答える 3

1
#!/bin/sh
if [[ ! $2 ]]
then
  echo test.sh SNI SNF
  exit
fi

echo "Run between $1 and $2"
seq $1 $2 | while read i
do
  # do stuff
done
于 2013-05-10T22:27:38.833 に答える
1

forOK、さまざまな入力を要約し、構文に固執したい場合に備えて。

read $sni

これは間接的です。変数に読み込むのではなく${sni}、名前が保持されている変数に読み込みます${sni}。たとえば、次のようになります。

$ foo=bar
$ read $foo <<< "quux"
$ echo "${foo}"
bar
$ echo "${bar}"
quux

だから、これは

read sni

代わりは。そして約...

for i in {sni..snf}

...ここでは変数を変数として扱っていないため、これは機能しません。使用する場合はksh 、次のことができます

for i in {${sni}..${snf}}; do
    ...
done

しかし、bashあなたが使いたい場合にはそれほど賢くありません

for i in $(seq ${sni} ${snf}); do
    ...
done

したがって、全体は次のようになります。

#!/bin/sh

read sni
read snf

echo "Run between '${sni}' and '${snf}'"
for i in $(seq ${sni} ${snf}); do
        echo "i=$i"
done

例:

$ printf "1\n4\n" | ./t.sh
Run between '1' and '4'
i=1
i=2
i=3
i=4
于 2013-05-10T22:56:18.307 に答える