Почему вставка функции Bash приводит к отображению всех возможностей и длинного списка?

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

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

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

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

введите здесь описание изображения

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

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

введите здесь описание изображения

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

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

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


person showkey    schedule 19.06.2020    source источник
comment
Я не уверен, о чем вы спрашиваете, но если вы хотите, чтобы вкладка вел себя как TAB, поместите строку Tab: tab-insert в ваш ~/.inputrc.   -  person Roadowl    schedule 19.06.2020


Ответы (1)


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

Чтобы избежать это:

set enable-bracketed-paste on

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

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

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

person Benjamin W.    schedule 19.06.2020
comment
вставка запускает автозаполнение, как консоль получает значение $1? - person showkey; 19.06.2020
comment
@showkey Он ведет себя так, как будто вы набрали for file in `ls $1`, а затем нажали клавишу ввода. - person Benjamin W.; 19.06.2020
comment
Это результат двойного tab. - person showkey; 20.06.2020
comment
@showkey А, вот что ты имел в виду. Тогда это не имеет ничего общего с $1, это просто результат завершения табуляции. - person Benjamin W.; 20.06.2020