Чтобы преобразовать табуляции в отдельные пробелы, вы по-прежнему можете использовать expand
, при этом позиции табуляции установлены на 1 вместо 8 по умолчанию:
$ expand foo
1 QA
2 DEV
3 OPS
$ expand -t1 foo
1 QA
2 DEV
3 OPS
Тем не менее, это по-прежнему расширяет последовательные вкладки на отдельные пробелы:
$ vim foo
$ expand foo
1 QA
2 DEV
3 OPS
$ expand -t1 foo
1 QA
2 DEV
3 OPS
В зависимости от желаемого поведения вы можете использовать это илиtr
:
$ tr -s '\t' ' ' < foo
1 QA
2 DEV
3 OPS
Команда trap
просто принимает строку для обработки в качестве команд оболочки, например eval
. Эта строка будет обрабатываться для расширения, поэтому разница между двойными и одинарными кавычками заключается в том, когда происходят первые расширения. В двойных -кавычках они происходят при установке ловушки, в одинарных — при ее срабатывании.
. это напечатает foo=1
, когда read
будет прервано, но с одинарными кавычками будет напечатаноfoo=2
:
#!/bin/bash
foo=1
trap "echo foo=$foo; exit" INT
foo=2
read # hit Ctrl-C here
Конечно, даже с двойными кавычками результирующая команда также расширяется, когда срабатывает ловушка, поэтому наличие foo=$0
в строке перед ловушкой выше приведет к тому, что сценарий будет печатать имя сценария по прерыванию.