Ошибка назначения многострочной строковой переменной bash

Вы можете попробовать команду convertследующим образом:

convert -density 300 -define pdf:fit-page=A4  

Другое решение:

pdfjam --outfile  --paper a4paper 

Основная справочная страница здесь

Руководство здесь

Скачать здесь

Примеры команд здесь

1
13.06.2021, 13:20
2 ответа

В test1.sh echoпечатает все переданные ему аргументы-"some text"— первый аргумент, а "some more text"— второй аргумент.

В то время как test2.sh пытается объединить строки и присвоить значение переменной, используя неправильный метод объединения.

Чтобы разбить строку на несколько строк, просто оставьте закрывающую кавычку и продолжите на следующей строке, например:

text="some text \
some more text"
2
28.07.2021, 11:25

Цитирование Язык команд оболочки POSIX ,

A <backslash> that is not quoted shall preserve the literal value of the following character, with the exception of a <newline>. If a <newline> follows the <backslash>, the shell shall interpret this as line continuation. The <backslash> and <newline> shall be removed before splitting the input into tokens. Since the escaped <newline> is removed entirely from the input and is not replaced by any white space, it cannot serve as a token separator.

Это означает, что в вашем первом примере оболочка фактически выполняет

echo "some text" "some more text"

представляет собой простую команду echo, за которой следуют два аргумента, объединенные с помощью символа пробела при выводе на стандартный вывод.

Во втором примере оболочка фактически выполняет

text="some text" "some more text"
echo $text

где первая строка интерпретируется как простая командаsome more text(одна лексема, включая символы пробела ), которым предшествует присвоение переменной text="some text"; затем выполняется echo $text.

Чтобы получить тот же результат, что и первый, второй фрагмент можно изменить на

text="some text "\
"some more text"
echo "$text"

Обратите также внимание на двойные кавычки в echo "$text", необходимые для предотвращения применения оболочкой разделения слов и создания имени файла к расширению $text(. Это не имеет значения для ваших примеров строк, но было бы, если бы они содержали пробелы. последовательности символов, отличные от одиночного пробела и/или подстановочных символов ).

5
28.07.2021, 11:25

Теги

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