Почему при вставке функции Bash появляется «Показать все возможности» и появляется длинный список? - PullRequest
1 голос
/ 19 июня 2020

Внутренний разделитель полей (сокращенно IFS) относится к переменной, которая определяет символ или символы, используемые для разделения шаблона на токены для некоторых операций. IFS обычно включает пробел, табуляцию и новую строку.

Показать мой текущий IFS:

echo -n "$IFS" |xxd
00000000: 2009 0a 

Теперь я написал простой bash скрипт.

enter image description here

Весь код находится в моем dropbox .

Когда я вставляю его в консоль:

enter image description here

В начале строки 2 до строки 5 это \t; если я заменю его пустым, его можно будет скопировать в консоль, и ничего не произойдет.

Итак, мы можем сделать вывод, что \t приводит к этому действию. Интересно, если переменная $1 никогда не была назначена, как работает код при вставке в консоль?

Я читал концепцию IFS несколько раз, но не могу найти объяснение.

1 Ответ

5 голосов
/ 19 июня 2020

Это потому, что когда вы что-то вставляете, поведение такое, как если бы вы вводили это буквально; поскольку вы используете табуляцию для отступа, вставка запускает автозаполнение.

Существует параметр строки чтения , чтобы этого избежать:

set enable-bracketed-paste on

Это входит в ваш .inputrc.

Из руководства:

Если установлено значение On, Readline настроит терминал таким образом, чтобы он мог вставлять каждую вставку в буфер редактирования как одну строку символы, вместо того, чтобы рассматривать каждый символ, как если бы он был прочитан с клавиатуры. Это может предотвратить интерпретацию вставленных символов как команды редактирования. По умолчанию off.

.
...