В чем разница: и правда?

В bash :

 $ type : : is a shell builtin $ type true true is a shell builtin 

Похоже, что они одинаковы, но они не дают такой же системный след:

 $ strace : strace: :: command not found $ strace true execve("/bin/true", ["true"], [/* 82 vars */]) = 0 [snip] exit_group(0) = ? 

Я попытался использовать strace bash -c : 2>:.txt и strace bash -c true 2>true.txt , но не смог найти различий между ними, кроме мест памяти.

В dash :

 $ type : : is a special shell builtin $ type true true is a shell builtin 

Хорошо, так что они не совпадают. help : и help true не очень полезны, и они возвращают то же самое в bash и dash . Есть ли какие-либо практические различия между ними, за исключением того, что : сохраняет три байта и делает скрипты менее читаемыми?

2 Solutions collect form web for “В чем разница: и правда?”

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

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

 type -a : type -a true 

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

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

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

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

Linux и Unix - лучшая ОС в мире.