Почему -n появляется в моем тесте bash [[ вывод отладки условия?

Похоже, это просто:

pcregrep -Mn '.\nFrom ' myfile

Вы также можете предварительно -обработать фальшивый mbox с помощью formail -es, что добавит недостающие строки.

0
23.10.2019, 00:17
1 ответ

[[ ведет себя так, как задумано, потому что $var==barна самом деле не является условным выражением, сравнивающим две строки, а представляет собой одну строку (, которая содержит два знака равенства ). Поскольку [[... ]]содержит только строку, а не условное выражение, по умолчанию используется флаг -nдля проверки того, не является ли строка нулевой длины -и, таким образом, оценивается с кодом выхода 0. Однако это не то, что вы хотели, поэтому, если вы хотите оценить, равно ли $var значению bar, используйте пробелы вокруг оператора ==, чтобы превратить его в условное выражение:

[[ $var == bar ]]

Из справочной страницы условных выражений:

string1 == string2

string1 = string2

True if the strings are equal. When used with the [[ command, this performs pattern matching as described above (see Conditional Constructs).

‘=’ should be used with the test command for POSIX conformance.

6
28.01.2020, 02:14

Теги

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