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
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
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
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)
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.
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