LINUX.ORG.RU
ФорумAdmin

Экранирование в переменной для awk

 


0

1

Все привет, подскажите пожалуйста. В Bash мне нужно задать переменную,типа:

i=$(echo "{null=Test, 1=7.5.1}" | awk -F "=" {'print $3'} | awk -F "}" {'print $1'})

Проблема в том, что bash в скрипте понимает $3 и $1 как входные параметры, которых нет. Как это можно исключить? Такое исполнение тоже не катит:

i=`echo "{null=Test, 1=7.5.1}" | awk -F "=" {'print $3'} | awk -F "}" {'print $1'}`
Спасибо!

Может уже не извращаться, а писатьт сразу на awk? Ну там

#!/usr/bin/awk -f
BEGIN{
  print "ASS" }

anonymous
()
Ответ на: комментарий от Matisse
(yarametov@whitedevil)-'--> i=`echo "{null=Test, 1=7.5.1}" | awk -F "=" {'print $3'} | awk -F "}" {'print $1'}`
(yarametov@whitedevil)-'--> echo $i
7.5.1

То ли я не понял вопроса, то ли у меня крутой bash.

whitedevil
()
Ответ на: комментарий от whitedevil

А ты выполнял из bash скрипта?Из консоли все работает.

#!/bin/bash
i=$(echo "$1" | awk -F "=" {'print $3'} | awk -F "}" {'print $1'})
echo $i
Где входной параметр {null=Test, 1=7.5.1}. Соответственно получаю:
line 3: 2=: command not found
1=7.5.1}

Matisse
() автор топика
Ответ на: комментарий от Matisse

test.sh

#!/bin/bash

i=$(echo "{null=Test, 1=7.5.1}" | awk -F "=" {'print $3'} | awk -F "}" {'print $1'})
echo $i
bash test.sh 
7.5.1

whitedevil
()
Ответ на: комментарий от Matisse

Ну низнаю, все робит

itaos@g565:/tmp$ cat ./test.sh 
#!/bin/bash
i=`echo "$1" | awk -F "=" {'print $3'} | awk -F "}" {'print $1'}`
echo $i
itaos@g565:/tmp$ ./test.sh "{null=Test, 1=7.5.1}"
7.5.1
iTA05
()
Ответ на: комментарий от Matisse
 cat test.sh 
#!/bin/bash
i=$(echo "$1" | awk -F "=" {'print $3'} | awk -F "}" {'print $1'})
echo $i
(yarametov@whitedevil)-'--> bash  test.sh "{null=Test, 1=7.5.1}"
7.5.1
whitedevil
()
Ответ на: комментарий от iTA05

Называется найди 10 отличий. Странно. Но спасибо всем за уделенное время!

Matisse
() автор топика

echo "{null=Test, 1=7.5.1}" | awk -F "=" {'print $3'} | awk -F "}" {'print $1'}

Сударь, писать программы в упоротом виде крайне не рекомендуется.

Иначе ведь и действительно можно не заметить, что здесь разделитель первого уровня — запятая, а не знак равенства; а второго — знак равенства, а вовсе не фигурная скобка.

Zmicier ★★★★★
()
Ответ на: комментарий от whitedevil

То ли я не понял вопроса, то ли у меня крутой bash.

Думаю, что второе. Но это не повод оставлять спецсимволы — фигурные скобки — неэкранированными.

Zmicier ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.