Разница между использованием переменной «IGNOREEOF=n» и использованием слова «ignoreeof=n»?

steeldriver опубликовал ответ в качестве комментария, поэтому я публикую его как ответ. echo "FLAG" | base64 выходы RkxBRwo=, поэтому ваша команда

grep -nr `echo "FLAG" | base64`
делает
grep -nr RkxBRwo=
Но, судя по тому, что вы показали, ваш файл test.txtне содержит RkxBRwo=; он содержит RkxBR(, за которым следуют другие символы ).

Если вы хотите найти свои файлы для первых 5 символов кодировки base64 FLAG, делать

grep -nr `echo "FLAG" | base64 | cut -c1-5`
1
22.03.2021, 14:56
1 ответ

Страница руководства говорит о set -o ignoreeof, что:

The effect is as if the shell command 'IGNOREEOF=10' had been executed

На самом деле это буквально:

$ echo $IGNOREEOF

$ set -o ignoreeof
$ echo $IGNOREEOF
10

Делая наоборот, set +o ignoreeofсбрасывает IGNOREEOF, а SHELLOPTSкажется, что содержит ignoreeof, когда IGNOREEOFустановлено (независимо от того, установлено ли оно через присвоение ему, илиset -o ignoreeof). (Я тестировал с Bash 4.4.)

Переменная нижнего регистра ignoreeof, вероятно, не делает ничего особенного.

Как ни странно, строчная переменная ignoreeofкажется своего рода недокументированным эквивалентом прописной. Таким образом, изменение любого из них изменяет количество требуемых EOF, что, я полагаю, и есть то, что вы нажмете во втором примере.

Согласно сопровождающему , строчная

exists only for backwards compatibility; it's deprecated and has been for years

В общем, set -oфлаги и переменные — разные вещи.

3
28.04.2021, 22:57

Теги

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