Pregunta

Ya sea que se perdió un poco de contragolpe o backlashing no parece trabajo con demasiada programador Cotización en bucle.

$ echo "hello1-`echo hello2-\`echo hello3-\`echo hello4\`\``"

hello1-hello2-hello3-echo hello4

Se busca

hello1-hello2-hello3-hello4-hello5-hello6-...
¿Fue útil?

Solución

Uso $(commands) lugar:

$ echo "hello1-$(echo hello2-$(echo hello3-$(echo hello4)))"
hello1-hello2-hello3-hello4

$(commands) hace lo mismo como acentos abiertos, pero puede anidar ellos.

Es posible que también esté interesado en expansiones Bash:

echo hello{1..10}
hello1 hello2 hello3 hello4 hello5 hello6 hello7 hello8 hello9 hello10

Otros consejos

Si usted insiste para uso acentos abiertos, lo siguiente podría hacerse

$ echo "hello1-`echo hello2-\`echo hello3-\\\`echo hello4\\\`\``"

usted tiene que poner las barras invertidas, \\ \\\\ \\\\\\\\ por 2x y así sucesivamente, es sólo muy feo, $(commands) uso como otra propuesta.

En cualquier momento en que desea evaluar un command substitution uso de comandos:

$(command)

En cualquier momento en que desea evaluar una expresión expression substitution aritmética uso:

$((expr))

Puede anidar éstos como esto:

file1.txt digamos Vamos es de 30 líneas de largo y file2.txt es de 10 líneas de largo, que se puede evaluar una expresión como la siguiente:

$(( $(wc -l file1.txt) - $(wc -l file2.txt) ))

lo que la salida 20 (la diferencia en el número de líneas entre dos archivos).

Es mucho más fácil si utiliza $(cmd) comando de fiesta de la sustitución de sintaxis , que es mucho más amigable para ser anidados:

$ echo "hello1-$(echo hello2-$(echo hello3-$(echo hello4)))"
hello1-hello2-hello3-hello4

A veces backtick anidamiento pueden estar sustituidos con xargs y tuberías

$ echo hello4 | xargs echo hello3 | xargs echo hello2 | xargs echo hello1
hello1 hello2 hello3 hello4

inconveniente de esta solución son:

  • Todos los argumentos se debe proporcionar en orden inverso (4 ? 1);
  • Todos los argumentos se convierten en el espacio separado (solucionable con tr):

    $ echo hello4 | xargs echo hello3 | xargs echo hello2 | xargs echo hello1 | tr ' ' '-'
    hello1-hello2-hello3-hello4
    


Vamos a mostrar un verdadero caso de uso.

A raíz de comandos funcionan en bash, pero no en tsch (anidación backtick no se maneja muy bien en tcsh)

$ ls $(dirname $(which bash))
$ ls `dirname \`which bash\``

Se puede estar sustituido con

$ which bash | xargs dirname | xargs ls
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top