获取cat输出的数值

获取cat输出的数值

当我将 cat 的结果保存到变量时,我得到以下结果:

wfpd=$'16213\r'

如何将此结果转换为数值,以便将其用作另一个命令的参数

答案1

您可以使用参数扩展来删除尾随的\r.%意思是“从值的末尾删除”。

wfpd=$'16213\r'
wfpd=${wfpd%$'\r'}
((wfpd == 16213)) || echo Wrong

答案2

如果你知道$wfpd您需要删除的值末尾有一个字符,如果您正在使用bashorzsh或 busybox sh¹,那么您可以这样做

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

这将从变量值中删除最后一个字符,无论它是什么。它是特定于上述 shell 的子字符串扩展,它扩展为从偏移量零到字符串中最后一个字符减一的字符值。


1.28.0 或更新版本,如果使用ENABLE_HUSH_BASH_COMPATfor构建hush,则ENABLE_ASH_BASH_COMPATfor ash(默认)

答案3

通过ksh93zshbash,您可以使用:

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

要从内容中删除除 0123456789- 之外的所有字符$wfpd(假设是十进制整数,您需要适应浮点数或十六进制......)。

POSIXly,您可以使用:

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

$wfpd删除以 0123456789- 以外的第一个字符开头的部分或:

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

删除最后一个小数位之后的所有内容。

而不是做:

wfpd=$(cat < file)

你还可以这样做:

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

它将读取文件的第一行直到第一\r行,$wfpd甚至无需生成新进程或执行命令。

答案4

您也可以从变量名称中删除除数字之外的所有内容。如果变量名保存在名为 的文件中file.txt,则:

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

cat file.txt | sed 's/[^0-9]*//g'
16213

相关内容