Вопрос или проблема
Я хочу скопировать несколько строк (разделенных клавишей Enter) из, например, блокнота и затем вставить их в новую переменную в CMD или консоль Bash и после этого выполнить с ними некоторые операции.
Хотя это довольно легко в PowerShell (я просто ввожу
variable_name=”
затем вставляю скопированные строки и просто добавляю
“
в конце), в предшественниках это гораздо сложнее, так как CMD интерпретирует каждое нажатие Enter как “выполнить”. Есть ли какой-то другой способ это сделать, кроме как сохранение во внешний текстовый файл?
После каждой строки добавляйте \
, чтобы указать на несколько строк. Ответ дан на Stack Overflow (хотя он, вероятно, туда даже не относится.)
Попробуйте команду readarray (или её псевдоним mapfile) в сочетании с here-document:
readarray -t my_array <<EOF
line 1
line 2
line 3
EOF
# Вывести элементы массива
echo "${my_array[@]}"
Объяснение:
readarray -t my_array
: Эта команда считывает входные данные и сохраняет каждую строку как элемент в массиве my_array. Опция -t удаляет завершающий перевод строки из каждой строки.<<EOF
: Начало here-document. Это указывает, что последующие строки будут входными для readarray. Here-document продолжается до следующего появления EOF.EOF
: Обозначает конец here-document.echo "${my_array[@]}"
: Выводит массив.
Ответ или решение
Вопрос о том, как вставить строку, состоящую из нескольких строк, в переменные CMD или Bash, является актуальным для многих специалистов по информационным технологиям. В то время как PowerShell предоставляет интуитивно понятный способ работы с такими данными, CMD и Bash требуют более детального подхода.
Теория
В командной строке Windows (CMD) каждая новая строка воспринимается как новая команда, что усложняет вставку многострочных значений напрямую. В Bash, напротив, есть возможность использовать "here-документы" и массивы, чтобы обойти такую проблему.
Примеры
1. CMD:
Если у вас есть необходимость работать с многострочными данными в CMD, то одним из решений может быть использование командного файла или построчной обработки данных. Но прямого и простого способа, как в PowerShell, в CMD, к сожалению, нет. Можете рассмотреть вариант использования двойных кавычек и ^
(символ продолжения строки), чтобы объединить строки, но это может не сработать для больших объемов текста.
2. Bash:
Для Bash, как упомянуто, можно использовать команду readarray
:
readarray -t my_array <<EOF
строка 1
строка 2
строка 3
EOF
# Вывод элементов массива
echo "${my_array[@]}"
readarray -t my_array
: Загружает каждую строку ввода в массивmy_array
. Опция-t
удаляет завершающую новую строку.<<EOF ... EOF
: Здесь-документ, который позволяет вставить многострочный текст.
Применение
Для профессионалов, работающих с различными скриптами, понимание таких приемов является важным аспектом повседневной работы. В Bash все проще и гибче, чем в CMD, поэтому если ваша рабочая среда позволяет, переход на Bash может существенно оптимизировать обработку текстовых данных. Также PowerShell предлагает удобство в том, что можно использовать простые инструменты для обработки многострочных строк без необходимости обходных маневров, применяемых в CMD.
Таким образом, выбор инструмента осуществляется на основе ваших требований и возможностей окружения, в котором вы работаете.