2016-11-20 2 views

ответ

3

Вам необходимо ввести фактический символ табуляции:

var=${var///} 
     ^that's really meant to be a TAB character 
      but might not be visible on this site 

В командной строке, , чтобы вставить символ табуляции, пресс управленияvTAB.

0

\ t не символизирует TAB в bash regex.

${var//$(echo -e "\t")/ } 
+2

'эхо -e' может или не может делать то, что вы хотите. Некоторые реализации могут печатать «-e» как часть их вывода. 'printf '\ t'' гораздо более портативен. –

+1

Не только некоторые реализации, но даже bash в некоторых режимах (т. Е. Если установлены флаги времени исполнения 'xpg_echo' и' posix'). Если вы * сделали * хотите заменить команду, 'printf '\ t'' будет более надежным. –

+1

(Кроме того, это не «bash regex» - это выражение fnmatch/glob). –

2

Добавление сюда, так как ввод фактического символа табуляции через PuTTY в оболочку bash не так прост. CTRLVTAB не работает с CTRLV запечатлен в окнах как паста.

Вместо этого я использовать:

${var//$'\t'/ } 

Пример:

$ var="te"$'\t'"st" 

$ echo $var 
te st 

$ echo ${var//$'\t'/i} 
teist 
+2

Можете показать 'echo '$ var' '(фактически испускающий вкладку), vs' echo $ var' (разделение строк и, таким образом, передача каждой стороны в качестве отдельного аргумента в 'echo', разделяя таким образом только пробелы). Аналогично, 'echo '$ {var // $' \ t '/ i}" 'не может ничего исправить с текущим/известным значением' var' и здравомыслящей IFS, но это более безопасная практика для людей, чтобы копировать и использовать в другом месте. –

Смежные вопросы