Bash Shell: ¿Cómo asignar un resultado calculado de bc a una variable e imprimirlo?

Bash Shell: ¿Cómo asignar un resultado calculado de bc a una variable e imprimirlo?

Estoy intentando replicar el código deaquíingrese la descripción de la imagen aquí

Por alguna razón, no funciona en mi computadora. La salida, en lugar del valor numérico, es el comando en sí.

apple$ x='echo "var=500;var%=7;var"|bc'
apple$ $x
"var=500;var%=7;var"|bc

Me gustaría saber por qué es eso. ¿Que hice mal?

Respuesta1

La fuente utiliza comillas invertidas ( `) para indicar la sustitución de comandos. Se ejecuta el comando especificado entre las comillas invertidas y el resultado se coloca en su lugar. En este caso, se trata de una asignación de variable simple, por lo que el resultado del comando se asigna a la variable.

Esto es fácil de ver con la -xopción de bash:

$ x=`echo "var=500;var%=7;var"|bc`
++ echo 'var=500;var%=7;var'
++ bc
+ x=3

En lugar de los caracteres de acento grave, ha utilizado comillas simples. Las comillas simples le indican al shell que mantenga el valor literal y no aplique ningún tipo de procesamiento a su contenido. Como resultado, el comando se asigna tal cual a la variable. Esta es la -xsalida correspondiente:

$ x='echo "var=500;var%=7;var"|bc'
+ x='echo "var=500;var%=7;var"|bc'

Por último, para imprimir el contenido de las variables, debe utilizar echoo printf. Cuando el valor de 'x' es 3, ejecutar $xle dará un -bash: 3: command not foundmensaje de error. La ejecución $xfuncionó en su caso solo porque el echocomando era parte del contenido de la variable.

Respuesta2

Como señaló Haxiel, en lugar de caracteres de acento grave, lo más probable es que haya utilizado comillas simples. Pero mejor que usar comillas invertidas ( `), le sugiero que las use $(). Las comillas invertidas están en desuso y $()son compatibles con POSIX.

En tu ejemplo podrías hacer:

x=$(echo "var=500;var%=7;var" | bc)
echo "$x"

O en una sola línea:

echo "var=500;var%=7;var" | bc

información relacionada