Вывод Linux ECHO переменной ECHO [дубликат]

/usr/libexec/locate.updatedben mi sistema (una variante BSD )no parece tener las opciones que sugiere A.B. En cambio, lo hace:

: ${FCODES:=/var/db/locate.database}
: ${SEARCHPATHS:="/"}

Así que tuve que hacer esto:

export SEARCHPATHS=$HOME
export FCODES=$HOME/locatedb
/usr/libexec/locate.updatedb

Entonces:

$ locate -d ~/locatedb <pattern>

¿Hay alguna forma de evitar establecer variables de entorno en mi sistema?

0
26.03.2019, 20:39
2 ответа

Предполагая, что вы используете bash, вы можете легко сделать это с помощью косвенной ссылки:

$ foo=bar
$ bar=magicword
$ printf "%s\n" "${!foo}"
magicword

Синтаксис$var(или${var})дает содержимое переменной var.

Синтаксис ${!var}дает содержимое переменной , названной вvar.

3
28.01.2020, 02:13

Предполагая, что вы используете оболочку bash:

$ source./file
$ echo "$VAR1"
ABCDEF
$ var=VAR1
$ echo "${!var}"
ABCDEF

Используя ${!var}, вы используете косвенную переменную в bash. Значение переменной varиспользуется для получения имени расширяемой переменной.


В bashвы также можете использовать переменную ссылки на имя:

$ source./file
$ echo "$VAR1"
ABCDEF
$ declare -n var="VAR1"
$ echo "$var"
ABCDEF

Здесь переменная varотносится к переменной VAR1, поэтому $varбудет расширяться до того, до чего расширяется $VAR1.

Ссылки на имена изначально являются функцией ksh, и в этой оболочке они объявляются с помощью typeset -n.

Ссылки на имена чрезвычайно полезны для передачи ссылок на массивы при вызовах функций оболочки.


В любой shоболочке:

$../file
$ echo "$VAR1"
ABCDEF
$ var=VAR1
$ eval "echo \"\$$var\""
ABCDEF

Утилита evalпринимает строку, которую она повторно -оценивает. Здесь мы даем ему строкуecho "$VAR1"(после расширения$var).

Проблема с evalзаключается в том, что с ним легко внести ошибки или уязвимости, небрежно создав строку аргумента.

6
28.01.2020, 02:13

Теги

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