Eu sou novo no bash. Quando executo o seguinte comando:
grep "type" /root/myFile | cut-d'=' -f2
Eu recebo o seguinte:
102
304
503
442
Quero armazenar o conteúdo do primeiro comando em uma variável de forma que o conteúdo da variável seja equivalente a declará-lo assim:
myVariable="102 304 503 442"
Eu não sei como fazer isso. Eu inicializo myVariable
com uma string vazia e percorro o conteúdo do comando linha por linha e acrescento-o em myVariable com espaços em branco entre ou existe uma maneira mais fácil de fazer isso com o bash?
Responder1
Você pode fazer isso sozinho bash
, usando a substituição de comandos e depois a expansão de parâmetros.
Primeiro pegue a saída do comando em uma variável usando substituição de comando $()
e, em seguida, use a expansão de parâmetros para substituir todas as novas linhas por espaços ${variable//$'\n'/ }
:
$ myVariable=$(grep "type" /root/myFile | cut-d'=' -f2)
$ myVariable=${myVariable//$'\n'/ }
$ echo $myVariable
102 304 503 442
Mas para reutilização e limpeza, seria melhor usar um array:
myArray=( $(grep "type" /root/myFile | cut-d'=' -f2) )
e itere sobre os elementos da matriz da maneira usual.
Responder2
myVariable=`grep "type" /root/myFile | cut-d'=' -f2`
O que está entre os back-ticks (`) é executado e a saída é atribuída a myVariable
.
Se sua saída atual estiver separada por feeds de linha ( \n
), você pode querer substituí-los por espaços como tr
:
myVariable=`grep "type" /root/myFile | cut-d'=' -f2`|tr '\n' ' '`
Nota: Algumas pessoas preferem usar a $()
sintaxe em vez de crases, mas ambos são úteis e quando tenho escolha, uso os crases. A verdadeira vantagem de ter ambos é se você deseja lidar com a execução em dois níveis, uma vez que a expressão marcada com crase será enviada primeiro para um sub-shell e então a $()
parte será executada.