A? рассматриваемый специальным способом в расширении параметра?

Как уже упомянуто, ddrescue и другие инструменты, которые пытаются перечитать DVD. В дополнение к этому попробуйте его различными дисками. Некоторые могут обработать царапины лучше, чем другие. С некоторой удачей можно получить полный образ DVD при использовании нескольких дисков попытаться считать дефектные части.

Наконец Вы можете удалять царапины физически. Можно купить ремонтный комплект DVD для дешевого, но я не имел большого успеха с ними. Если существует место видео DVD для сдачи в аренду около Вас, у многих из них есть устройства, которые полируют DVD и предлагают использование его за небольшую плату.

2
25.04.2015, 20:58
2 ответа

? - это символ глобуса оболочки, используемый для сопоставления имен файлов. Он совпадает с одним символом. Таким образом, поскольку у вас есть файл с именем ab, шаблон ? соответствует ему.

Причина, по которой это происходит, заключается в том, что ваше расширение параметров цитируется , а не .

.
4
27.01.2020, 22:00

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

Например, status_arr = ($ (git status --porcelain -b)) устанавливает status_arr в одноэлементный массив, содержащий 5-символьную строку ? ? ab ', потому что IFS содержит только новую строку и нет файла, соответствующего шаблону ?? ab . Если IFS имеет значение по умолчанию, содержащее пробел, тогда status_arr будет установлен как двухэлементный массив, содержащий два вхождения двухсимвольной строки ab .

Если подстановка переменной или команды заключена в двойные кавычки, то результирующая строка используется как есть: разделение полей и генерация имени файла применяются только к заменам без кавычек.

Вы можете полностью отключить создание имен файлов, запустив set -f . Это полезно, если вы хотите воспользоваться преимуществом разделения IFS . Обратите внимание, что set -f полностью отключает создание имени файла, а не только при выводе замен: set -f; echo * всегда печатает * .

#!/bin/bash
IFS=$'\n'
set -f
touch ab
status_arr=( $(git status --porcelain -b) )
for (( i=0; i<${#status_arr[@]}; i++ )); do
    echo "${status_arr[$i]}"
    echo "${status_arr[$i]:0:2}"
done

(Здесь, когда создание имен файлов по-прежнему отключено, и, учитывая, что элементы status_arr не могут содержать символы из IFS по конструкции, двойные кавычки в echo . Однако это очень хрупко - оно сильно зависит от способа создания массива и того факта, что статус set -f и значение IFS с тех пор не изменился. Всегда используйте двойные кавычки вокруг подстановок переменных и команд, если только у вас нет веских причин для их исключения и вы знаете, что это нормально.)

0
27.01.2020, 22:00

Теги

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