当我将 cat 的结果保存到变量时,我得到以下结果:
wfpd=$'16213\r'
如何将此结果转换为数值,以便将其用作另一个命令的参数
答案1
您可以使用参数扩展来删除尾随的\r
.%
意思是“从值的末尾删除”。
wfpd=$'16213\r'
wfpd=${wfpd%$'\r'}
((wfpd == 16213)) || echo Wrong
答案2
如果你知道$wfpd
您需要删除的值末尾有一个字符,如果您正在使用bash
orzsh
或 busybox sh
¹,那么您可以这样做
wfpd="${wfpd:0:-1}"
这将从变量值中删除最后一个字符,无论它是什么。它是特定于上述 shell 的子字符串扩展,它扩展为从偏移量零到字符串中最后一个字符减一的字符值。
1.28.0 或更新版本,如果使用ENABLE_HUSH_BASH_COMPAT
for构建hush
,则ENABLE_ASH_BASH_COMPAT
for ash
(默认)
答案3
通过ksh93
、zsh
或bash
,您可以使用:
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