sudo érdekesség

Ez most éppen nem az én problémám, nem akarom sem nyomozni, sem megoldani; egy másik fórumon találtam, és az érdekesség kedvéért beidézem.

$ sudo -u $USER bash -c 'x=hello; echo "#$x#${x}#"'
#hello#hello#

$ sudo -u $USER -i bash -c 'x=hello; echo "#$x#${x}#"'
##hello#

Vagyis ha van -i (vagy -s) opció, akkor a sudo megsemmisíti a $x-et, de meghagyja a ${x} -et.

Hozzászólások

Mindkét opció esetén az env-hez fordul. Ott meg akármi is lehet...

Másrészt a pedáns programozásnál illik kiírni a {} védelmet. Ennek az egyik alapvető célja az, hogy a shell számára vitás esetekben támogassa a döntést: Mi van odaírva? ;)

Ez hasonló az ".." védelemhez. Az is általában elhagyható, de biztosabb, ha odaírod.

A $x helyére a bash-nek az environmentjéből kerül be az eredmény:

$ sudo -i x=hi bash -c 'x=hello; echo ",$x,${x},"'
,hi,hello,

Szóval szerintem valami olyasmi lehet, hogy maga a bash parancs is egy shellben indul, ami nem érti a ${x} szintaxist.

Ha valaki megérti mért, az írja ide, mert mindenképp érdekes :)