Я не знаю, что означает эта «норма», но сама команда немного странная. Какой смысл копировать / bin / mv в «переименовать»? Точно так же выполняет команду
cp /bin/mv rename
На случай, если вы не знали. Все внутри `расширяется, поэтому
`which mv`
производит (в некоторых системах вывод может быть другим)
/bin/mv
Другими словами. Все внутри `вызывается первым, а результат подставляется в финальную команду.
Это может быть любая команда, например. Думаю, вы знакомы с командами «свидание» и «прикосновение». Допустим, мы хотим создать файл с именем, совпадающим с текущей меткой времени. Команда для получения текущей отметки времени - дата +% s. Взгляните на этот пример.
touch `date +%s`
То же, но с другой командой внутри `. "date +% s" вызывается первым, и результат - 1460885688 (ваш будет другим). После этого вызываемая команда будет выглядеть так
touch 1460885688
Быстрый ответ заключается в том, что они предназначены для работы - файловый дескриптор содержит состояние, которое включает позиции чтения и записи. Каждое чтение, выполненное для одного дескриптора файла, перемещает позицию чтения, независимо от того, кто читает из него — дескриптор файла содержит только одну позицию чтения.
По-другому, когда файловый дескриптор создается (ОС), он также создает структуру/таблицу, содержащую эти переменные состояния. В таблице есть только одна копия позиции чтения, и каждый раз, когда функция read() вызывается для файлового дескриптора, переменная единственной позиции чтения обновляется.
Когда вы говорите :read var <file
, дескриптор файла -закрывается после завершения команды. Следовательно, в следующий раз в цикле дескриптор файла -сбрасывается в начало.
В случае exec 3<file
, когда вы говорите read -r -u 3 var
, дескриптор файла остается открытым, даже когда команда чтения завершается, И позиция чтения обновляется, поэтому в следующий раз чтение захватит следующую строку.
Примечание. :Даже если вы сделали exec 0<file
, а затем read -r var
, он все равно будет вести себя одинаково.