Как выйти из специальных символов в строке?

Да, это возможно, пока Вы используете загрузчик, который понимает RAID-1 и LVM. Копайтесь 2 (т.е. Личинка 1.9x — LVM и поддержка технологией RAID, запущенная в Личинке 1.95), LILO (нестаринные вещи) делает, действительно Копается 1 (т.е. Личинка 0.9x) не делает.

Источник: я сделал это. Также:

GRUB 2 может считать файлы непосредственно из устройств RAID и LVM.

Копайтесь 1, или любой другой загрузчик не испытывает затруднений из-за RAID-1, он просто читает из одного из объемов (можно даже сохранить способность загрузиться без вмешательства, если одна из зеркальных половин перестала работать с правильным BIOS и установкой загрузочного сектора). Но Личинка 1 не понимает LVM, таким образом, Вам нужен non-LVM /boot.

Обратите внимание, что режимы Grub 2's RAID могли бы отстать от Linux, таким образом, в данном распределении, могут быть расположения RAID, что ядро Linux и поддержка инструментов пространства пользователя отлично, но Личинка дросселирует на. Например, в Ubuntu 10.04, Grub2 не поддерживал mdraid RAID-1 с 1,0 форматами метаданных (с метаданными в начале объема). Ubuntu 11.10, Grub2 поддерживал этот режим. Я не знаю точный порог версии (1.97?).

16
13.04.2017, 15:36
5 ответов

Try:-

file=Dr\'\ A.tif
echo $file
Dr' A.tif

или

file="Dr' A.tif"
echo $file
Dr' A.tif

или если строка содержит двойную кавычку:-

file='Dr" A.tif'
echo $file
Dr" A.tif

В сети есть хорошие учебные пособия по экранированию и кавычкам. Начните с этого.

.
4
27.01.2020, 19:48

Вам не нужно экранировать имена файлов, с которыми вы работаете в скрипте. Эвакуация необходима только в том случае, если вы хотите поместить имя файла в виде literal в скрипт, или передать несколько имён файлов в качестве одного входного потока в другой скрипт.

Так как вы прокручиваете выходной сигнал find, это один из простейших (!) способов обрабатывать все возможные пути:

while IFS= read -r -d ''
do
    file_namex="$(basename -- "$REPLY"; echo x)"
    file_name="${file_namex%$'\nx'}"
    do_something -- "$file_name"
done <(find "$some_path" -exec printf '%s\0' {} +)
1
27.01.2020, 19:48

Для этого можно использовать встроенную функцию printf с % q . Например:

$ file="Dr' A.tif"
$ printf '%q\n' "$file"
Dr\'\ A.tif

$ file=' foo$bar\baz`'
$ printf '%q\n' "$file"
\ foo\$bar\\baz\`

Из документации bash на printf :

 В дополнение к спецификациям стандартного формата, описанным в printf (1)
и printf (3), printf интерпретирует:

  % b развернуть escape-последовательности обратной косой черты в соответствующем аргументе
  % q цитирует аргумент таким образом, чтобы его можно было повторно использовать как ввод оболочки
  % (fmt) T выводит строку даты и времени, полученную в результате использования FMT в качестве формата
  строка для strftime (3)
 
14
27.01.2020, 19:48

быстро и (очень) грязно

find . | sed 's/^/"/' | sed 's/$/"/'
0
27.01.2020, 19:48

Многие из этих ответов, включая тот, который получил наибольшее количество голосов с использованием printf "% q" , не будут работать во всех случаях без дополнительных манипуляций. . Я бы предложил следующее (пример ниже):

cat << EOF; 2015-11-07T03: 34: 41Z app [postgres.0000]: [TAG] запрос текстового поиска не содержит лексемы: "" EOF

-1
27.01.2020, 19:48

Теги

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