Что сенсорный * делает?

Мне недавно задали вопрос в одном из интервью: как вы удалите файл с именем "*"? Поэтому я попытался создать файл как - touch *. Когда я перечисляю, я не вижу этот файл. Когда я редактирую (vi *). Я открываю файл со случайным текстом. Так что же такое прикосновение *?

3 ответа

Вы должны искать Unix "Globbing".

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

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

Если вы хотите увидеть, что * расширяется и как вы можете избежать этого, вы можете выполнить следующие команды:

  echo *
  echo '*'
  echo \*

Вы также можете использовать это с более конкретной моделью, такой как

  <command> a* # run the command on the list of file starting with a

Если вы хотите увидеть, что на самом деле выполнял терминал, когда вы запускаете touch * run:

 echo touch * 

Команда touch, как ранее объясняли другие, либо создаст пустой файл, если имя файла не существует, либо обновит последнюю измененную временную метку для существующих файлов. Итак, вы только что обновили последние измененные временные метки каждого не скрытого файла в каталоге, в котором вы выполнили команду.

Обратите внимание, что это происходит до того, как ваша команда будет вызвана. И если список файлов ОЧЕНЬ большой (миллионы), вы получите ошибку, так как список файлов будет слишком большим, чтобы поместиться в буфер команд (иначе строка вашей расширенной команды будет слишком большой)

Дополнительная информация: https://www.linuxjournal.com/content/bash-extended-globbing

Снаряды расширяются *, touch * является touch every nonhidden file in the current directory, Если вы хотите создать файл с буквальным именем *, вам нужно процитировать это: touch \* (или же touch '*' или же touch "*" и эквивалент для других команд, таких как rm).

Согласно man touch, touch изменяет временную метку файла. Если файл не существует, он создает его пустым, если -c или же -h параметры даны.

В Баше * это глобирующий символ, который распространяется на каждый не скрытый файл и каталог в текущем каталоге. Это означает touch * изменит метку времени каждого файла и каталога в текущем каталоге, если таковые имеются, на текущую дату и время.

Другие вопросы по тегам