Я полагаю, вы используете 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
Надеюсь, это вам поможет.
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 printf
obtiene 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í.
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