Я новичок в bash. Когда я запускаю следующую команду:
grep "type" /root/myFile | cut-d'=' -f2
Я получаю следующее:
102
304
503
442
Я хочу сохранить содержимое первой команды в переменной таким образом, чтобы содержимое переменной было эквивалентно ее объявлению следующим образом:
myVariable="102 304 503 442"
Я не знаю, как это сделать. Мне инициализировать myVariable
пустой строкой и пройти по содержимому команды построчно и добавить его в myVariable с пробелами между ними или есть более простой способ сделать это с помощью bash?
решение1
Это можно сделать и с bash
ним самим, используя подстановку команд, а затем расширение параметров.
Сначала возьмите вывод команды в переменной, используя подстановку команд $()
, а затем используйте расширение параметров, чтобы заменить все символы новой строки пробелами ${variable//$'\n'/ }
:
$ myVariable=$(grep "type" /root/myFile | cut-d'=' -f2)
$ myVariable=${myVariable//$'\n'/ }
$ echo $myVariable
102 304 503 442
Но для удобства повторного использования и чистоты лучше использовать массив:
myArray=( $(grep "type" /root/myFile | cut-d'=' -f2) )
и перебрать элементы массива обычным способом.
решение2
myVariable=`grep "type" /root/myFile | cut-d'=' -f2`
То, что находится между обратными кавычками (`), запускается, а вывод присваивается myVariable
.
Если ваш текущий вывод разделен символами перевода строки ( \n
), то вы можете заменить их пробелами, например tr
:
myVariable=`grep "type" /root/myFile | cut-d'=' -f2`|tr '\n' ' '`
Примечание: Некоторые предпочитают использовать синтаксис $()
вместо обратных кавычек, но оба варианта полезны, и когда у меня есть выбор, я использую обратные кавычки. Реальное преимущество наличия обоих вариантов заключается в том, что если вы хотите обрабатывать выполнение на двух уровнях, то выражение с обратными кавычками сначала будет отправлено в подоболочку, а затем $()
будет выполнена его часть.