On 12/1/25 22:25, Alexander Lubyagin wrote:
01.12.2025 18:40, Leonid Krivoshein пишет:
 echo "---" "$1"

это небезопасно, лучше так:

printf "%s %s\n" "---" "$1"

Небезопасно, потому что echo может быть внешней программой, и быть подменена?


Потому что echo может воспринимать аргументы как опции, особенно, если они идут в самом начале. И допускает бинарный вывод с "-e". То есть, результат может быть не таким, как его ожидают. В зависимости от аргументов и версии оболочки, неожиданная реакция может быть и на такие аргументы, как --help или --version.

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

name="-x my-binary"
:> "$name"
chmod +x -- "$name"
ls -- "$name"

Те, кто привык писать chmod +x $name или ls $name, получат неприятный сюрприз в этом месте. :-)

Хотя echo встроена во все оболочки, её можно переопределить, как любое другое имя. Например, так:

echo() {
  : Do nothing
}


--
WBR, Leonid Krivoshein.

_______________________________________________
devel-newbies mailing list
[email protected]
https://lists.altlinux.org/mailman/listinfo/devel-newbies

Ответить