Следует ли цитировать раскрытие истории?

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

Решением может быть изменение значения $ IFS на то, что соответствует вашим потребностям. например, в вашем случае только символы новой строки следует интерпретировать как разделитель:

# first save current value
OLD_IFS=$IFS

# change value to something you need
IFS="\n"

# do what you need to do here
#############################

# restore default value of IFS
IFS=$OLD_IFS

для получения дополнительных сведений см. Эту документацию {{ 1}} Ссылка на IFS

РЕДАКТИРОВАТЬ:

Я только что провел несколько тестов с img2pdf. У меня есть 101 изображение с именем

name_0.png, name_1.png, name_2.png, ..., name_100.png

, чтобы поместить их в файл test.pdf. Я использовал эту команду img2pdf -o test.pdf name_ {0..100} .png

, и с этим не возникло никаких проблем. Затем я провел еще один тест с файлами с пробелами в именах типа:

name 0.png, имя 1.png, имя 2.png, ..., имя 100.png

и команда (пробел экранирован обратной косой чертой): img2pdf -o test. pdf name \ {0..100} .png

Надеюсь, это вам поможет.

0
27.06.2018, 03:55
2 ответа

Depende de si desea agregar un conjunto de comillas alrededor de la palabra de la expansión del historial o no.

Suponiendo foo="abc def", compare

$ echo $foo
$ printf "<%s>\n" !$

contra

$ echo $foo
$ printf "<%s>\n" "!$"

El primero produce printf "<%s>\n" $foo, invocando la división de palabras, y printfobtiene dos argumentos después de la cadena de formato. El segundo produce printf "<%s>\n" "$foo", donde las comillas evitan la división de palabras, como de costumbre.

Por supuesto, si hicieras esto:

$ echo "$foo"

Luego, un !$en un siguiente comando ya se expandiría a "$foo", con las comillas ya en su lugar. Ahora, usar "!$"produciría ""!$"", donde las comillas efectivamente se cancelan entre sí.

2
28.01.2020, 02:18

La sustitución de historial recupera lo que se analizó como la última palabra, comillas y todo,

$ echo this that "the other"
this that the other
$ echo !$
the other

y se ejecuta primero, por lo que puede recuperar y volver a ejecutar otras sustituciones

$ echo `date`
Mon May 21 13:53:37 PDT 2018
$ echo !$
Mon May 21 13:53:38 PDT 2018
2
28.01.2020, 02:18

Теги

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