Calcule la variable y envíela a otra variable

10

La única calculadora que conozco es bc. Quiero agregar 1a una variable y salida a otra variable.

Obtuve la nextnumvariable al contar la cadena en un archivo:

nextnum=`grep -o stringtocount file.tpl.php | wc -w`

Digamos que el nextnumvalor es 1. Cuando se agrega con 1, se convertirá 2. Para calcular, corro:

rownum=`$nextnum+1 | bc`

pero tengo error:

1+1: command not found

Simplemente fallé en la parte de cálculo. Intenté cambiar el backtick pero aún no funciona. No tengo idea de cómo calcular variables y enviarlas a otra variable.

apasajja
fuente
1
Eche un vistazo a unix.stackexchange.com/questions/40786/…
Ulrich Dangel

Respuestas:

21

La subcadena dentro del ` `debe ser un comando válido en sí mismo:

rownum=`echo $nextnum+1 | bc`

Pero es preferible usar en $( )lugar de ` `:

rownum=$(echo $nextnum+1 | bc)

Pero no es necesario bc, el shell puede hacer aritmética de enteros :

rownum=$((nextnum+1))

O incluso más simple en bashy ksh:

((rownum=nextnum+1))
hombre trabajando
fuente
8

También puede usar aritmética integrada en bash:

rownum=$((nextnum+1))

que sería un poco más rápido

Julian
fuente
2

Absolutamente correcto y completar las soluciones sugeridas, solo para mencionar la forma en que se debe hacer en épocas anteriores cuando solo estaba disponible el Bourne-Shell, así es como le gusta:

rownum=`expr $nextnum + 1` 
lobo
fuente
1

Yo usaría (como se mencionó anteriormente) rownum=$((nextnum+1))o, ((rownum=nextnum+1))pero si prefiere un comando estándar, puede usar el comando let, comolet rownum=$nextnum+1

Hola Soy Edu Feliz Navidad
fuente
1
Llamar a letun "comando estándar" es muy engañoso. $((…))es la sintaxis estándar (POSIX) mientras que letes una extensión ksh (y bash, zsh).
Gilles 'SO- deja de ser malvado'