Как включить в кавычки, если и одинарные и двойные кавычки уже используются?

Остановитесь в #coreboot на IRC или присоединитесь к почтовой рассылке и укажите, где у Вас есть проблема. Мы пытаемся ясно дать понять документацию, но и coreboot и qemu разрабатывают быстро.

7
24.10.2012, 17:02
5 ответов

Можно полностью избежать потребности заключить использованию в кавычки здесь документы. Обратите внимание, что установка маркировки в единственных / двойных кавычках (как в "EOF" в примере ниже) отключает переменную и оценку команды в рамках текста.

cat <<"EOF" >>~/globalLog.txt
cat file2.txt  | sed 's/"//g' > file3.txt ## Step 2
EOF
12
27.01.2020, 20:13
  • 1
    Это должно работать в любой оболочке POSIX. –  jordanm 24.10.2012, 18:33
  • 2
    @jordanm, спасибо. Удаленный ссылка на удар. –  iruvar 24.10.2012, 18:39
  • 3
    Вы могли бы хотеть отметить важность двойных кавычек вокруг EOF. Без них здесь текст подвергается переменному расширению, которое иногда полезно. –  Dale Hagglund 24.10.2012, 18:43

У Вас есть много вариантов, и каждый из них может быть удобным в различных ситуациях.

  1. Двойная кавычка целая строка как один, и Escape литеральные двойные кавычки внутри (легкий читать, если у Вас есть только одно такое возникновение, но Вы могли бы закончить с частоколом):

    echo "cat file2.txt  | sed 's/\"//g' > file3.txt ## Step 2 " >> ~/globalLog.txt
    
  2. Используйте различные кавычки для различных частей строки:

    echo "cat file2.txt  | sed 's/"'"'"//g' > file3.txt ## Step 2 " >> ~/globalLog.txt
    
  3. Использовать echoспособность обработать несколько аргументов. Это применимо, если только отдельное слово содержит незаконный символ, так как результат будет обычно иметь пространство между каждым аргументом, таким образом, это не будет работать на Вашу строку. Альтернативный пример:

    echo 'foo"' "'bar"
    

    печать

    foo" 'bar
    
  4. Используйте несколько echo -n операторы (или printf %s) сопровождаемый echo без -n:

    echo -n "cat file2.txt  | sed '" >> ~/globalLog.txt
    echo -n 's/"' >> ~/globalLog.txt
    echo "//g' > file3.txt ## Step 2 " >> ~/globalLog.txt
    
  5. Не используйте кавычки вообще, но выходите из всех специальных символов:

    echo cat\ file2.txt\ \ \|\ sed\ \'s/\"//g\'\ \>\ file3.txt\ \#\#\ Step\ 2\  >> ~/globalLog.txt
    

Обратите внимание, что не возможно выйти из одинарных кавычек в единственной заключенной в кавычки строке.

И если в сомнении, Использование Больше Quotes™.

В Вашем случае, однако, похоже на вход команды прежде, чем выполнить его. Уже существует очень хорошее решение для работы с командами как текст.

6
27.01.2020, 20:13
  • 1
    Мой обычный метод (который является самым простым для того, чтобы программно заключить неизвестные данные в кавычки) должен включить все это в одинарные кавычки, затем вспыхнуть, и обратная косая черта выходят из любого, которые являются внутри. например. 'don'\''t' - это подобно Вашему "..."'"'"..." пример, но немного легче следовать. –  Random832 24.10.2012, 20:06

Существует простой, систематический и совместимый POSIX способ заключить любую строку в кавычки. Только необходимо помнить два правила:

  1. Апострофы кавычки (одинарные кавычки) с обратной косой чертой как так: \'
  2. Заключите все в кавычки кроме апострофов путем окружения его апострофами как так: 'printf "foo\n"'

Проиллюстрировать, как использовать эти правила вместе, слово don't может систематически заключаться в кавычки как это: 'don'\''t'

Можно часто находить более читаемый способ заключить строки в кавычки, но когда вещи являются сложными, это - надежный способ получить заключение в кавычки, Вы хотите.

Заключенная в кавычки форма строки в вопросе:

$ echo 'cat file2.txt  | sed '\''s/"//g'\'' > file3.txt ## Step 2 ' >> ~/globalLog.txt
5
27.01.2020, 20:13

просто выйдите " как так:

echo "cat file2.txt  | sed 's/\"//g' > file3.txt ## Step 2 " >> ~/globalLog.txt
3
27.01.2020, 20:13

Просто

$ cat >> ~/globalLog.txt
<now type your command>
echo "cat file2.txt  | sed 's/"//g' > file3.txt ## Step 2 "
<hit ctrl-d>
1
27.01.2020, 20:13

Теги

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