быстрый '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
Нет никакой реальной разницы в поведении. Обе команды ничего не делают и выходят с успешным состоянием. :
подчеркивает выполнение ничего; 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 :
.
Они идентичны в Bash. Посмотрите на builtins/colon.def
в исходном коде Bash-4.2.
В Вашей команде strace true
Вы на самом деле выполняете двоичный файл /bin/true
вместо удара, встроенного верный.
/bin/true
или/bin/false
. Также:
команда иногда используется для побочных эффектов обработки аргумента:: ${num_times:=10}
. – Arcege 21.03.2012, 20:16:
был первоначально индикатор маркировки, назад в предке Оболочки Bourne, которая имелаgoto
. По-видимому,:
был злоупотреблен как индикатор комментария и застрял. – Gilles 'SO- stop being evil' 22.03.2012, 01:40:
поскольку индикатор маркировки для goto был сохранен в клоне командной строки псевдо-Unix Microsoft,command.com
, и остается в его преемникеcmd.exe
, как делает практику злоупотребления::
для комментария строки. – Sorpigal 25.06.2012, 15:19