2012-03-22 11 views
0

Ce états fonctionne très bien dans BASH v. 4.1.7 (1), mais pas dans BASH v. 4.2.20 (1)version BASH problème lié

num=${number:$counter:1} 

Je reçois "Bad substitution" comme Erreur. Des idées sur pourquoi cela se passe? L'objectif est de faire quelque chose de similaire à ${string:position:length} pour obtenir une sous-chaîne.

Toute aide sera grandement appréciée. Merci.

Le code original qui avait cette ligne est ajoutée ci-dessous (ligne 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

Quelles sont les valeurs de 'number' et' counter'? – ruakh

+0

nombre est une entrée. counter est une variable qui va de 0 à strlen du nombre. Disons numéro = 123, et le compteur est 1. – Bill

+0

Fonctionne bien pour moi dans 3.2.48 - êtes-vous sûr qu'il n'y a pas d'autres différences? –

Répondre

2

l'expression est bien avec 4.2.20 quand je l'ai testé. peut-être avez-vous quelque chose dans votre 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

Je ne suis au courant de rien. Y a-t-il quelque chose de particulier que je puisse rechercher? Merci pour cela. – Bill

+1

c'est bizarre. peut-être que vous pouvez l'enregistrer comme un script et l'exécuter comme: bash -x test.sh, que j'ai couru sans problèmes. Si vous rencontrez une erreur, s'il vous plaît poster la sortie et je vais jeter un coup d'oeil. – johnshen64

+0

Je me demande si votre paquet bash est en quelque sorte corrompu? Vous pouvez le réinstaller s'il ne s'agit que d'un système de test. Pour un système de production, vous devez être très prudent. – johnshen64