10/17/2011

Экранирование в bash, кто знает?

Есть такой скриптик в bash:

#!/bin/bash
set -x
a () 
   echo $1 
}

b () 
   a "--some-flag='param1 param2,param3'" 
}
b


в функции a () echo вызывается как:
echo '--some-flag='\''param1' 'param2,param3'\'''

как сделать чтобы параметры которые передаются в a () не экранировались?

т.е. чтобы echo вызывался вот так:
echo --some-flag='param1 param2,param3'

т.е. чтобы параметры передавались как есть ?

2 комментария:

  1. Не вполне понятна задача.
    Вот так не пойдёт?

    set -x
    a ()
    {
    echo $@
    }

    b ()
    {
    a --some-flag=param1 param2,param3
    }
    b



    Или так:

    #!/bin/bash
    set -x
    a ()
    {
    echo "$1"
    }

    b ()
    {
    a "--some-flag=param1 param2,param3"
    }
    b

    ?

    ОтветитьУдалить
  2. Я бы (Аноним #2) предложил бы разбить задачу на две: распарсить твою строку на
    flag (=--some-flag) & flag_val (=param param2,param3). Как это сделать и не изобретать велосипед - милости просим в 'configure' скриптик в корневой папочке Qemu. Они парсят там параметры - я бы попробовал. а потом передавал бы два параметра и конкатенировал. хотя, конечная задача не ясна... так что, не обессудьте за неточный ответ

    ОтветитьУдалить