Скопировать файл через существующий сеанс SSH? [дубликат]

Вообще-то, это интересный вопрос. @tink указал, почему ваш код не работает должным образом, но вопрос был не в этом. Вопрос был в том, «почему 0 иногда совпадает».

Если (/ foo / ~ $ 1) действительно означает (($ 0 ~ / foo /) ~ $ 1) , то ($ 0 ~ / foo /) будет оцениваться как 1 , если строка содержит foo , и 0 в противном случае. Таким образом, вы (в основном) оцениваете 0 ~ $ 1 . Если строка ввода пуста, тогда $ 1 == "" , и всегда соответствует пустое регулярное выражение. Если входная строка равна точно 0 , то $ 1 равно $ 1 , а 0 ~ 0 истинно. Если строка ввода, например, 000 , то это же $ 1 , и 0 ~ 000 не должно быть истинным. Однако вполне вероятно, что 000 преобразуется в 0 перед проверкой совпадения.

Но, к сожалению, это объяснение не охватывает всех случаев.

Случай 1

0 <-- found match
a
0 <-- found match
0 <-- found match

Это именно то, что ожидалось.

Случай 2

0 <-- found match
00 00 <-- found match
0 <-- found match

Это также то, что ожидается, при условии, что любое количество нулей интерпретируется как 0 . Но теперь это:

Случай 3

0 <-- found match
a
00 0
0

Это не может быть объяснено так просто. После неудачного совпадения преобразования в ноль не происходит, и следующие строки, которые должны совпадать, не выполняются.

Случай 4

0 <-- found match
a
00 00
a
0 <-- found match

Что бы ни случилось, другое неудавшееся сопоставление, похоже, сбрасывает поведение awk до нормального, и сопоставление снова работает должным образом.

В заключение, либо объяснение из справочной страницы GNU awk , которая, кстати, не является частью информационной страницы, неверно (или, по крайней мере, неполно), либо программа содержит Жук.

307
13.03.2018, 17:30
0 ответов

Теги

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