[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