Atribui valor a uma variável no bash, vindo de outros comandos

2

Fazendo isso no bash, faz com que a variável SUFFIX mantenha / dev / fd / [fd],

SUFFIX=<( echo "&*645\[]}#@name" | sed -r 's/[^[:alnum:]]+/_/g' )

O que devo fazer para atribuir o resultado real de comandos executados entre parênteses? Portanto, neste caso, SUFFIX deve receber um valor de _645_name ?

    
por branquito 22.03.2014 / 01:23

2 respostas

7

Você usou a sintaxe para a substituição de processo , que passa pelo saída de um comando como entrada para outro comando. Mas o que você queria era substituição de comando , que agarra a saída de um comando como uma linha. A substituição de comandos usa $(…) .

SUFFIX=$( echo "&*645\[]}#@name" | sed -r 's/[^[:alnum:]]+/_/g' )

Observe que, se você estiver usando o bash, poderá fazer isso com suas próprias construções internas. Se o texto a ser higienizado estiver na variável foo :

shopt -s extglob
SUFFIX=${foo//+([^[:alnum:]])/_}
    
por 22.03.2014 / 01:27
2

Se esse é o seu sufixo, a resposta deve ser fácil:

suffix="${str##*[!_A-Za-z0-9]}"

Para obter as peças com este método você pode, no máximo, obter cabeça e cauda. Mas você pode conseguir isso:

head="${str%"${tail:="${str##*[!_A-Za-z0-9]"}"}"}"
    
por 22.03.2014 / 01:33

Tags