Почему мне нужно экранировать знак доллара даже с помощью grep -F

gawk '
{
    arr[cnt][0] = $1    
    arr[cnt++][1] = $2  
}
END {
    for(i = 0; i < cnt; i++) {
        if(!arr[i][0]) continue

        next_name = arr[i][0]

        for(j = i; j < cnt; j++) {
            if(arr[j][0] != next_name) continue

            if(arr[j][1]) {
                next_name = arr[j][1]
                delete arr[j]
            }
            printf "%s ", next_name

        }
        print ""
    }
}' cnt=0 input.txt

Вход(сложный для тестирования)

u
a
a f
b
c
c e
d
c
f g
g a
a i
i j
a
a z
z w

Выход

u 
a f g a i j 
b 
c e 
d 
c 
a z w 
-1
07.12.2019, 02:50
1 ответ

Оболочка расширяется $youкак (вероятно пустая )переменная, поскольку вы использовали "слабые" (двойные )кавычки.

Вы можете подтвердить это, установив в оболочке xопцию:

$ grep -F "hey$you" test
+ grep --color=auto -F hey test
# hey$you
# hey$me

Как видите, "hey$you"становится просто hey-, что соответствует обеим строкам.

Напротив, с сильными (одиночными )кавычками вокруг шаблона:

$ grep -F 'hey$you' test
+ grep --color=auto -F 'hey$you' test
# hey$you
4
28.01.2020, 05:07

Теги

Похожие вопросы