Экранирование двойных кавычек в строке

Теоретически да. На практике обычно тоже да. Если вы вызываете сценарий оболочки или псевдоним, который делает что-то странное, то, возможно, нет.

Вы можете использовать echo , чтобы увидеть, до какой конкретной команды будет расширена оболочка:

$ echo rm -R ~
rm -R /home/frostschutz
$ echo rm -R "~"
rm -R ~

Обратите внимание, что echo удаляет "" , поэтому вы не должны копировать и вставлять то, что он печатает. Это просто показывает, что если вы укажете "~" , команда буквально увидит ~ , а не расширенный путь / home / frostschutz .

Если у вас есть какие-либо сомнения по поводу какой-либо команды, как насчет того, чтобы начать с чего-то менее смертоносного, если оно пойдет не так? В вашем случае вы можете начать с переименования, а не сразу удалить.

$ mv "~" delete-me
$ ls delete-me
# if everything is in order
$ rm -R delete-me

Для запутанных имен файлов, которые обычно не должны существовать (например, ~ и другие имена, начинающиеся с ~ или , или содержащие символы новой строки и т. Д.), Это Лучше быть в безопасности, чем потом сожалеть.

Также рассмотрите возможность использования автозавершения табуляции (введите ls ~ ), большинство оболочек изо всех сил стараются позаботиться о вас, это также помогает избежать ошибок при вводе обычных имен файлов.

2
28.07.2015, 02:13
2 ответа

Со стандартным ящиком для инструментов, sed - хороший вариант:

sed -e 's/"/\\&/g' <sampleMetadata
2
29.04.2021, 00:25

Другой способ избежать двойных кавычек (и других специальных символов) поместить все строки в одинарные кавычки (если они отсутствуют в вашем тексте) ):

sed "s/^\|$/'/g" <sampleMetadata
0
29.04.2021, 00:25

Теги

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