locsemege Creative Commons License 2009.12.09 0 0 675
Saját magadat csapod be, mert rossz példát írtál. Az első nem megy, hiszen így helyettesítődik:

if [ "kakukk" = "kakukk" -a -a y = "-a y" ]; then

Ez így hibás.

A második jó, hiszen:

if [ x"kakukk" = x"kakukk" -a x"-a y" = x"-a y" ]; then

A harmadik is jó:

if [ "kakukk" = "kakukk" -a "-a y" = "-a y" ]; then

A harmadikkal az a baj, hogy ebben a konkrét esetben ugyan jó, de általában nem. Nézzük ezt:

n="("
m="kakukk"
if [ "$m" = "kakukk" -a "$n" = "(" ]; then
echo kakukk
fi

Helyettesítés után:

if [ "kakukk" = "kakukk" -a "(" = "(" ]; then

Azaz:

if [ kakukk = kakukk -a ( = ( ]; then

Ezzel az a gond, hogy a nyitó zárójelet tényleg nyitó zárójelként értelmezi, s nincs záró párja. Viszont ha odaírod az x-et - vagy szinte bármit -, akkor:

if [ xkakukk = xkakukk -a x( = x( ]; then

Az x( viszont nem olyan karakter, amitől felizgul a test, mint valami speciálisan értelmezendő dolog. Az csak egy buta string.
Előzmény: DonQuijote (673)