Добрый день.
В процессе написания скрипта столкнулся с таким моментом:
Есть файл с текстом:
1212 | 4956666666 | 0000
парсим этот файл простым скриптом, что бы получить только значение до первого "|":
#!/bin/bash
cat text | grep $1 | awk -F "|" {'print $1'}
leks@leks-PC:~/sripts$ bash -x ./test 6666
+ cat text
+ grep 6666
+ awk -F '|' '{print $1}'
1212
и даже получаем нужное значение.
Но как bash понял что в строке
cat text | grep $1 | awk -F "|" {'print $1'} :
grep $1 (тут берем первый входной параметр),
а тут
awk -F "|" {'print $1'} берем первый результат разделения строки с помощью awk?
Почему не интерпретировал строку как
cat text | grep 6666 | awk -F "|" {'print 6666'}?
Если без конкретного примера, то вопрос могу сформулировать так:
Как избегаются конфликты переменных при выполнение скрипта ./test $1 $2 $3 $4 и программ (awk, sed и пр) которые внутри скрипта в своем внутреннем синтаксисе используют такие же переменные?
Уффф надеюсь подробно и понятно написал)