如何获取shell程序中的字符串长度?bash下i2cdetect字符串长度为0排查
问题原因
你写的i2cdetect -y 1 > i2cdetect_string是重定向语法,作用是把命令执行结果输出到名为i2cdetect_string的磁盘文件中,全程没有给同名的shell变量赋值。你后续调用的$i2cdetect_string是一个未定义的空变量,所以计算出来的长度自然为0,和i2cdetect返回的内容有没有特殊字符没有任何关联。
你尝试的数组长度语法也不会生效,本质原因还是变量本身为空,和数据类型无关。
解决方法
方案1:直接把命令结果存入变量
使用shell的命令替换语法捕获命令输出到变量,不需要经过文件中转:
# 命令替换用$()包裹要执行的命令 i2cdetect_string=$(i2cdetect -y 1) # 此时就能正常获取字符串长度 echo "The i2cdetect_string length is: ${#i2cdetect_string}"
方案2:从已生成的文件中读取内容计算长度
如果你确实需要先把结果保存为文件,可以先读取文件内容到变量再计算长度,也可以直接用wc命令统计文件字符数:
# 方法1:读取文件内容到变量后计算长度 i2cdetect_content=$(<i2cdetect_string) echo "内容长度是:${#i2cdetect_content}" # 方法2:直接统计文件的总字符数 echo "文件总字符数是:$(wc -c < i2cdetect_string)"
内容的提问来源于stack exchange,提问作者Eebigdog
相关产品推荐
相关产品推荐

