Что такое разница между одинарными и двойными кавычками, используемыми с командой trap?

Чтобы преобразовать табуляции в отдельные пробелы, вы по-прежнему можете использовать 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
0
31.12.2019, 14:13
1 ответ

Команда 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в строке перед ловушкой выше приведет к тому, что сценарий будет печатать имя сценария по прерыванию.

2
28.01.2020, 02:38

Теги

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