Obtém o valor numérico da saída do cat

0

Quando salvo o resultado do cat para a variável, recebo o seguinte:

wfpd=$'16213\r'

Como posso converter esse resultado em valor numérico para usá-lo como um argumento para outro comando

    
por Alex Bondar 12.09.2018 / 16:34

4 respostas

3

Você pode usar a expansão de parâmetro para remover o \r à direita. % significa "remover do final do valor".

wfpd=$'16213\r'
wfpd=${wfpd%$'\r'}
((wfpd == 16213)) || echo Wrong
    
por 12.09.2018 / 16:39
2

Se você conhece , há um caractere no final do valor de $wfpd que você precisa excluir e se você estiver usando bash ou zsh ou busybox sh ¹, então você pode fazer

wfpd="${wfpd:0:-1}"

Isso removeria o último caractere do valor da variável, independentemente do que seja. É uma expansão de substring específica para as shells mencionadas que se expande para o valor do caractere do deslocamento zero para o último caractere na string menos um.

¹ 1.28.0 ou mais recente, e se for construído com ENABLE_HUSH_BASH_COMPAT para hush , ENABLE_ASH_BASH_COMPAT para ash (padrão)

    
por 18.09.2018 / 13:26
1

Com ksh93 , zsh ou bash , você pode usar:

wfpd=${wfpd//[^[:digit:]-]}

Para remover todos os caracteres que não sejam 0123456789- do conteúdo de $wfpd (assumindo inteiros decimais, você precisaria se adaptar para pontos flutuantes ou hexadecimais ...).

POSIXly, você pode usar:

wfpd=${wfpd%%[![:digit:]-]*}

para remover a parte de $wfpd começando com o primeiro caractere diferente de 0123456789 - ou:

wfpd=${wfpd%"${wfpd##*[[:digit:]]}"}

para remover tudo após o último dígito decimal.

Em vez de fazer:

wfpd=$(cat < file)

Você também pode fazer:

IFS=$'\r' read wfpd rest_ignored < file

Qual seria a primeira linha do arquivo até o primeiro \r em $wfpd sem gerar um novo processo ou executar um comando.

    
por 18.09.2018 / 13:52
0

Você pode, alternativamente, remover todos, exceto os dígitos do nome da variável. Se o nome da variável for salvo em um arquivo chamado file.txt , então:

cat file.txt 
wfpd=$'16213\r'

cat file.txt | sed 's/[^0-9]*//g'
16213
    
por 18.09.2018 / 15:37