Cria uma string a partir da matriz de Strings

0

Eu tenho um código bash, no qual eu gostaria de criar uma string longa a partir de um array de strings.

O código bash é o seguinte:

# Load all the SNPs
arrSNPsToBeExtracted=( $( cat $indexFileName ) )

arrSNPsString="\""

lenArrSNPsToBeExtracted=${#arrSNPsToBeExtracted[*]} 
si=0
while [ $si -lt $lenArrSNPsToBeExtracted ]
do
    arrSNPsString=${arrSNPsString}"|"${arrSNPsToBeExtracted[$si]}

    #echo $si": "${arrSNPsString}

    let si++
done

arrSNPsString=$arrSNPsString"\""

echo $arrSNPsString

=====================

Como você pode ver, eu tenho uma lista de SNPs (palavras):

word1
word2
word3

E eu quero fazer assim:

"word1|word2|word3"

Esta string é atribuída a arrSNPsString , mas não posso fazer isso acontecer. O que estou fazendo de errado?

Como você pode ver no código, o arrSNPsString deve ficar mais longo, mas em vez disso, é necessário no final do loop while apenas o último item.

Eu sei que tem algo a ver com ambientes / variáveis locais e globais. Desejo estender uma cadeia global arrSNPsString em um loop local.

Alguém sabe Como posso resolver este problema

    
por MartinoSuperman 29.11.2013 / 11:26

1 resposta

1

Eu li isso na página de manual do bash :

% bl0ck_qu0te%

para que você possa substituir seu loop:

arrSNPsString="$(IFS="|"; echo "${arrSNPsToBeExtracted[*]}" )"
echo "$arrSNPsString"

Eu tentei isso diretamente no prompt do bash:

a[1]=aaaa
a[2]="bbbb cccc"
a[3]=dddd
b="$(IFS="|"; echo "${a[*]}")"
echo "$b"

quais impressões:

aaaa|bbbb cccc|dddd

Não mexa no IFS, sempre restaure seu valor antigo depois de tê-lo alterado. A sintaxe $(..) neste código faz isso para você.

    
por Emmanuel 29.11.2013 / 12:53