Что является различием между: и верный?

быстрый 'n' грязный

find . -type d | \
while IFS= read -r d; do
    f=$(ls -F "$d");
    echo "$f" | egrep -q "/$" || \
        echo $d : $(echo -n "$f"|wc -l) files;
done
15
13.01.2013, 14:20
2 ответа

Нет никакой реальной разницы в поведении. Обе команды ничего не делают и выходят с успешным состоянием. : подчеркивает выполнение ничего; true подчеркивает успешное состояние.

strace true работы, потому что true и встроенная оболочка и внешняя команда (/bin/true); : только встроенная оболочка (существует нет /bin/: - хотя мог быть и вероятно был в очень старых системах Unix). В ударе попробовать

type -a :
type -a true

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

Существует некоторое внутреннее различие в dash. Просмотр источника, доступного в git://git.kernel.org/pub/scm/utils/dash/dash.git, показывает некоторые различные пути выполнения кода в eval.c, но я не смог произвести любое явно другое поведение кроме слова special в выводе type :.

27
27.01.2020, 19:49
  • 1
    Кроме того, ранние версии UNIX не имели /bin/true или /bin/false. Также : команда иногда используется для побочных эффектов обработки аргумента: : ${num_times:=10}. –  Arcege 21.03.2012, 20:16
  • 2
    : был первоначально индикатор маркировки, назад в предке Оболочки Bourne, которая имела goto. По-видимому, : был злоупотреблен как индикатор комментария и застрял. –  Gilles 'SO- stop being evil' 22.03.2012, 01:40
  • 3
    Поведение : поскольку индикатор маркировки для goto был сохранен в клоне командной строки псевдо-Unix Microsoft, command.com, и остается в его преемнике cmd.exe, как делает практику злоупотребления :: для комментария строки. –  Sorpigal 25.06.2012, 15:19

Они идентичны в Bash. Посмотрите на builtins/colon.def в исходном коде Bash-4.2.

В Вашей команде strace true Вы на самом деле выполняете двоичный файл /bin/true вместо удара, встроенного верный.

8
27.01.2020, 19:49

Теги

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