Estoy siguiendo esta guía de scripting de bash shell:
En la sección Comparaciones numéricas, cita un ejemplo:
anny > num=`wc -l work.txt`
anny > echo $num
201
anny > if [ "$num" -gt "150" ]
More input> then echo ; echo "you've worked hard enough for today."
More input> echo ; fi
Lo que parece suceder arriba es que almacenamos una cadena de comandos en una variable bash y luego invocamos echo en la variable. Lo que parece suceder es que se evalúa la cadena y se ejecuta el comando wc y devuelve el recuento de líneas al terminal de control.
Ok, entonces lanzo mi terminal en Ubuntu 12.04 e intento algo similar:
$ touch sample.txt && echo "Hello World" > sample.txt
$ cat sample.txt
Hello World
$ num='wc -l sample.txt'
echo $num
wc -l sample.txt
Espere un segundo, eso no evaluó la cadena y devolvió el recuento de líneas. Eso solo hizo eco de la cadena de regreso a la terminal. ¿Por qué obtuve resultados diferentes?
command-line
bash
scripts
JohnMerlino
fuente
fuente

wc -l work.txt, sino que se le asigna el número 201.Respuestas:
Necesitas usar backticks para evaluar la expresión.
Si desea ver solo "1" en la salida, use el comando
Y también funciona:
Para obtener información adicional, consulte Diferencias entre comillas dobles "", comillas simples '' y comillas inversas ´ ´ en la línea de comandos?
fuente
wccomando. Tratarcat sample.txt | wc -l.Tenga en cuenta ese símbolo:
Una frase
y
Cita posterior
Por lo tanto, el Backquote devuelve el resultado del comando a Salida estándar. Es por eso que
devuelve resultados del comando, mientras
simplemente devuelva "wc -l sample.txt" como cadena habitual
Considere hacer esto como ejemplo:
Y ahora repite las tres variables:
fuente
Si desea capturar la salida de un comando en una variable, debe usar los backticks
``o encerrar el comando en$():Tenga en cuenta que la cadena se evalúa realmente en el momento de la declaración de variable, no cuando la repite. El comando se ejecuta realmente dentro de las
$()teclas de retroceso o y la salida de ese comando se guarda como el valor de la variable.En general, siempre debe usar en
$()lugar de backticks que están en desuso y solo por razones de compatibilidad y mucho más limitados. No puede, por ejemplo, anidar comandos dentro de backticks, pero puede hacerlo con$():Consulte este hilo en U&L para obtener más detalles sobre por qué
``debe evitarse.fuente
$()a``. Pero como dice Wag, las comillas inversas sí anidan.echo $(date -d $(echo yesterday))se convierteecho `date -d \`echo yesterday\``;echo $(echo $(date -d $(echo yesterday)))se convierteecho `echo \`date -d \\\`echo yesterday\\\`\``. Digo que esto no refuta su tesis, sino que la fortalece : las comillas internas escapadas hacen que la``sintaxis sea más poderosa de lo que a menudo se admite, pero el tratamiento especial\es extraño, sorprendente y difícil de razonar. Con$()lo que ves es generalmente lo que obtienes.