Предполагая, что вы используете оболочку 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
заключается в том, что с ним легко внести ошибки или уязвимости, небрежно создав строку аргумента.
I understand that one cannot do VFS operations on a medium with no filesystem.
Возникает вопрос: «О каких именно операциях идет речь?» которые вы поясняете ниже...
Given that, how does a utility like fio perform VFS-like read/write/seek operations on raw devices?
Несмотря на то, что чтение/запись/поиск могут выполняться для вещей, которые имеют VFS, они не являются эксклюзивными операциями VFS, -допустимо выдавать их устройствам, которые также понимают соответствующие системные вызовы.
Как заявил @andy -dalton Linux блочные устройства принимают системные вызовы, такие как read()
/ write()
и fio
, просто выдают стандартные вызовы библиотеки чтения/записи (, которые в конечном итоге превращаются в системные вызовы )для них (, как если бы это был файл в файловой системе ), а ядро позаботится об этой разнице. См.https://github.com/axboe/fio/blob/2dd96cc46fa83a73acc1c9238c3ac59203e10213/engines/sync.c#L226-L229в качестве примера. Это упрощение, но оно иллюстрирует общую концепцию.