Иноды каталогов

Один из случаев, когда фигурные скобки необходимы, — это когда вы собираетесь использовать переменную как часть строки:

$ var=test
$ echo "stuff$varmorestuff"
stuff
$ echo "stuff${var}morestuff"
stufftestmorestuff

Без фигурных скобок оболочка думает, что я пытаюсь расширить переменную с именем varmorestuff, которая не установлена.

Из справочного руководства bash 3.5.3 Расширение параметров оболочки:

The ‘$’ character introduces parameter expansion, command substitution, or arithmetic expansion. The parameter name or symbol to be expanded may be enclosed in braces, which are optional but serve to protect the variable to be expanded from characters immediately following it which could be interpreted as part of the name.

Из руководства по оболочке 2.6.2 Расширение параметров

If the parameter name or symbol is not enclosed in braces, the expansion shall use the longest valid name (see the Base Definitions volume of IEEE Std 1003.1-2001, Section 3.230, Name), whether or not the symbol represented by that name exists.


Дополнительные фигурные скобки требуются при работе с любым двузначным позиционным параметром.

script.sh

#!/bin/sh
if [ "$1" = 'correct' ]; then
        echo "$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9" "${10}"
else
        echo "$2" "$3" "$4" "$5" "$6" "$7" "$9" "$9" "$10"
fi

В действии:

$./script.sh one two three four five six seven eight nine ten
two three four five six seven nine nine one0
$./script.sh correct two three four five six seven eight nine ten
two three four five six seven eight nine ten

Из руководства bash 3.4.1 Позиционные параметры

Positional parameter N may be referenced as ${N}, or as $N when N consists of a single digit.

Из руководства по оболочке 2.6.2 Расширение параметров

The parameter name or symbol can be enclosed in braces, which are optional except for positional parameters with more than one digit or when parameter is followed by a character that could be interpreted as part of the name. The matching closing brace shall be determined by counting brace levels, skipping over enclosed quoted strings, and command substitutions.

0
12.09.2020, 08:22
1 ответ

Ваша первая ссылка (на единственную диаграмму )является (в основном )мусором. Просто сказать, что индексный дескриптор указывает непосредственно на «содержимое _файла __2», является нелепым упрощением. Я никогда не видел, чтобы термин «пул данных» использовался в этом контексте.

Что он делает, так это иллюстрирует, что иерархия каталогов/файлов представляет собой дерево, которое реализуется путем обхода списка индексных дескрипторов для каждого шага.

Ваша вторая ссылка выглядит лучше, но я не прочитал ее полностью. Это все еще не полное объяснение, но тогда что-нибудь «завершенное» будет иметь дело с десятью тонко различающимися файловыми системами.

Я не понимаю, почему вы думаете, что в ссылке 1 говорится, что каталоги и файлы обрабатываются одинаково, а в ссылке 2 говорится, что они разные. Вещи, которые являются общими для обоих типов записи, обрабатываются одинаково. Там, где они становятся разными, в файле есть набор блоков, в которых хранятся пользовательские данные, а в каталоге есть набор блоков, в которых хранятся файлы -системные данные (, в частности,таблица имен и инодов ).

0
18.03.2021, 23:05

Теги

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