2012-03-22 14 views
0

この文BASH Vに正常に動作します。4.1.7(1)ではなく、BASH Vの。4.2.20(1)BASHバージョン関連問題

num=${number:$counter:1} 

私は "悪い置換" を取得していますエラー。なぜこれが起こっているのかについての洞察はありますか? 目的はサブ文字列を取得するために${string:position:length}に似たようなことをすることです。

ご協力いただければ幸いです。ありがとう。

以下添加され、このラインを有していた元のコード(行15)

#!/bin/bash 

echo "Please enter a number: " 
read number 

counter=0 
answer=0 
end=$((${#number} - 1)) 

echo -n "The sum of all digits of " 
echo -n $number 
echo -n " is " 

while [ $counter -lt ${#number} ] ; do 
num=${number:$counter:1} 
if [ $counter -lt $end ] ; then 
echo -n $num 
echo -n "+" 
else 
echo -n $num 
echo -n "=" 
fi 
answer=$(($answer + $num)) 
counter=`expr $counter + 1` 
done 

echo $answer 
+0

「数値」と「カウンタ」の値は何ですか? – ruakh

+0

番号は入力です。 counterは、数値の0からstrlenの範囲の変数です。数字= 123、カウンターは1と言います。 – Bill

+0

3.2.48でうまく動作します - 他に違いはありませんか? –

答えて

2

私はそれをテストしたときに発現が4.2.20で結構です。多分あなたはあなたのenvに何かを持っていますか?

[localhost ~]$ bash --version 
GNU bash, version 4.2.20(1)-release (i386-redhat-linux-gnu) 
Copyright (C) 2011 Free Software Foundation, Inc. 
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> 

This is free software; you are free to change and redistribute it. 
There is NO WARRANTY, to the extent permitted by law. 
[localhost ~]$ number=123 
[localhost ~]$ counter=0 
[localhost ~]$ echo $number 
123 
[localhost ~]$ num=${number:$counter:1} 
[localhost ~]$ echo $num 
1 
+0

私は何も知らない。私が探すことができるものは何ですか?ありがとう。 – Bill

+1

は奇数です。多分あなたはそれをスクリプトとして保存し、それを以下のように実行することができます:bash -x test.sh、これは問題なく走ったものです。エラーが発生した場合は、出力を投稿してください。 – johnshen64

+0

あなたのbashパッケージが何とか壊れているのだろうか?単なるテストシステムであれば、再インストールすることができます。実動システムでは、非常に注意する必要があります。 – johnshen64