[newbies] Неиспользуемые переменные в Bash и оптимизация
Leonid Krivoshein
klark.devel на gmail.com
Вт Дек 2 05:12:36 MSK 2025
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