Объединение значение переменной и строка для формирования другой переменной

После того, как я внес в черный список snd-hda-intel и перезагрузился, все работало отлично из коробки.

1
24.10.2018, 17:52
3 ответа

Según la respuesta anterior, puede usar eval para esto.

eval [arg...] The args are read and concatenated together into a single com‐ mand. This command is then read and executed by the shell, and its exit status is returned as the value of eval. If there are no args, or only null arguments, eval returns 0. (from bash man page)

Sin embargo, este es uno de esos malos hábitos de programación que debes tener muy en cuenta y utilizar lo menos posible. Normalmente se puede evitar por algo más elegante, menos propenso a errores -y más fácil de depurar.

var1=host
eval echo ${var1}_file # print contents of $host_file
1
27.01.2020, 23:32

Realmente no puedo ver por qué no querrías usar el direccionamiento indirecto variable a menos que estés escribiendo un scriptsh(no bash).

Como se mencionó, evalfuncionará, pero generalmente está mal visto ya que su uso tiene el potencial de ser peligroso, especialmente cuando se evalúan los datos proporcionados por el usuario -sin un saneamiento cuidadoso.

Otra forma de lograr el mismo efecto es usar el nombre -variables de referencia (disponibles en bashdesde la versión 4.3 ).

var1=host

declare -n nameref="${var1}_file"

nameref="something something"

printf '%s\n' "$host_file"

Esto generaría la cadena something something. Usar typeset -nen lugar de declare -nharía que funcionara tanto en bashcomo en ksh93.

1
27.01.2020, 23:32

Si tiene variables nombradas como una combinación de algún nombre propio y atributos relacionados, probablemente debería usar matrices asociativas en su lugar. Suponiendo que tiene Bash 4.x, ksh o zsh, eso es. Consulte una página o otra en BashGuide. (En realidad, las estructuras como en C estarían bien, pero realmente no puedes obtener eso con Bash.)

Es decir, para almacenar una URL y un puerto para los hosts/clusters oregony arizona, no cree cuatro variables arizona_url, arizona_port, oregon_url, oregon_port, sino algo como esto:

typeset -A urls ports
urls[oregon]="http://..."
urls[arizona]="http://..."
ports[oregon]=1234
ports[arizona]=2345

y luego use aquellos con "${urls[$hostname1]}", "${ports[$hostname]}", etc.

1
27.01.2020, 23:32

Теги

Похожие вопросы