Analisando uma string usando a função bash

0

Estou tentando substituir alguns códigos pela função bash para reutilizá-lo. Então, meus códigos anteriores são:

#!/bin/bash
set aline=" dsfsdf | fsdfff | yuhfd "
set line_parsed='echo $aline | tr '|' "\n"'
echo ${line_parsed[1]}

Quais saidas dsfsdf .

Agora, se estou tentando colocar a sentença em uma função, não consigo acertar:

#!/bin/bash
parseLine ()
{
set line_parsed='$echo $1 | tr '|' "\n"'
echo ${line_parsed[1]}
}
set aline=" dsfsdf | fsdfff | yuhfd "
parseLine $aline

Existe um erro de sintaxe?

    
por cdnszip 23.08.2016 / 13:52

1 resposta

3

Para criar um array a partir da string, use:

IFS='|' read -r -a line_parsed <<< "$aline"
  • IFS='|' define bashs promotor de campo interno para |
  • read lê seu descritor de arquivo de entrada padrão
    • -r A barra invertida não funciona como um caractere de escape.
    • -a line_parsed cria uma matriz chamada line_parsed
  • <<< "$aline" é uma sequência , que transmite o conteúdo do padrão $aline para read s entrada.

Agora você terá uma matriz. echo "${line_parsed[0]}" dará o primeiro elemento da string dividida.

Tudo isso em uma função:

parseLine ()
{
  IFS='|' read -r -a line_parsed <<< "$1"
  echo "${line_parsed[0]}"
}

Isso agora pode ser chamado assim:

$ parseLine "dsfsdf | fsdfff | yuhfd "
dsfsdf
    
por 23.08.2016 / 14:47

Tags