Как echo разбирает $100?

Для ramsfs / initrams устройство для кэширования файловой системы «пусто». Если вы посмотрите описание в /Documentation/filesystems/ramfs-rootfs-initramfs.txt :

Обычно все файлы кэшируются в памяти Linux. Страницы данных, считанные из резервного хранилища (обычно это блочное устройство, на котором установлена ​​файловая система), хранятся на случай, если они снова понадобятся, но помечены как чистые (бесплатные) в случае, если {{1 }} Системе виртуальной памяти нужна память для чего-то еще. Точно так же данные , записанные в файлы, помечаются как чистые, как только они были записаны в резервное хранилище , но сохраняются для целей кэширования, пока виртуальная машина не перераспределит память . Подобный механизм (кэш-память dentry) значительно ускоряет доступ к каталогам .

У ramfs нет резервного хранилища. Файлы, записанные в ramfs, как обычно выделяют данные и кеш страниц, но их некуда записать. Это означает, что страницы никогда не помечаются как чистые, поэтому они не могут быть освобождены с помощью {{ 1}} ВМ, когда она хочет переработать память.

Таким образом, «механизм раскрытия внутренней структуры кеша как файловой системы» не является неправильным, но я бы не описал его так: это файловая система, которая использует обычную внутреннюю структуру кеша, но не имеет места для «резервного копирования» (как и ramdisk ), поэтому он только живет в кэше, а механизмы аннулирования и обратной записи страниц никогда не используются.

Что касается файла cpio , снова посмотрите на ramfs-rootfs-initramfs.txt :

Старый initrd всегда был отдельным файлом, а архив initramfs - {{ 1}} связан с образом ядра Linux.(Каталог linux - * / usr предназначен для создания этого архива во время сборки.)

Итак, cpio загружается с использованием того же метода, что и ядро, которое может быть с блочного устройства, или по сети, или через голубятню, или что-то еще. Неважно. Об этом позаботится загрузчик, ядру не нужен драйвер файловой системы.

2
24.11.2018, 21:52
1 ответ

Позиционные параметры , $1, $2,..., $9содержат аргументы командной строки, передаваемые текущей оболочке или функции оболочки. Строка $100будет интерпретироваться как $1, за которой следуют два нуля. Это будет 00, если $1не установлено или пусто.

Установка трех первых позиционных параметров явно в скрипте и тестирование:

set -- a b c

echo "$100 $200 $300"

Это приводит к выводу

a00 b00 c00

Поскольку к позиционным параметрам за пределами 9 необходимо получить доступ, например, с помощью. ${10}, между $1, за которым следует 00, и «позиционным параметром 10 или 100» (нет неоднозначности, так как скобок )нет.

Если бы вы хотели напечатать литеральную строку $100, вам пришлось бы либо экранировать $из оболочки, либо использовать одинарные кавычки:

echo \$100
echo '$100'
2
27.01.2020, 22:09

Теги

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