【问题标题】:String length of bashbash的字符串长度
【发布时间】:2013-07-19 16:21:48
【问题描述】:

我已经写了这个来查找字符串的长度,但是它没有显示字符串的长度。

我写的有什么问题吗?我只是 bash 的初学者。

Str=abcdefghj

echo "Str is:" `expr length $Str` "characters long"

【问题讨论】:

  • 您写的内容没有问题,但是您使用的expr 的实现很可能不支持length 参数。来自expr 的标准:“使用字符串参数长度、子字符串、索引或匹配会产生未指定的结果。”
  • 如果你的 shell 是 Bash,基本上不应该有任何理由使用expr。它在 sh 中是必要且有用的,它具有更多有限的用于算术和字符串操作的 shell 内置工具。

标签: bash shell


【解决方案1】:

这可以在 bash 中本地完成,无需求助于expr

echo ${#Str}

【讨论】:

  • ${#Str} 根据本地计算字符数,与echo -n $Str | wc -m 相同。要获取以字节为单位的大小,请将本地设置为 C,LC_ALL=C echo ${#Str}
【解决方案2】:

这里有几种计算变量长度的方法:

echo ${#Str}
echo -n $Str | wc -m
echo -n $Str | wc -c
printf $Str | wc -m
expr length $Str
expr $Str : '.*'

参考: http://techopsbook.blogspot.in/2017/09/how-to-find-length-of-string-variable.html

https://youtu.be/J6-Fkkj7f_8

【讨论】:

  • 除第一个外的所有进程都使用外部进程,通常您希望尽可能避免。替代方案可能对sh 脚本有用(另请参阅Difference between sh and bash)。
【解决方案3】:

试试这样的:

echo "Str is: `expr length $Str` characters long"

【讨论】:

  • 您能解释一下为什么您认为这回答了 OP 的问题吗? 是否尝试过这两种方法并比较了结果?
  • 反对票和前面的评论可能(至少部分)是由于最初破坏了这个答案的 Markdown 格式错误。尽管如此,与 1990 年代初期的传统反引号相比,可能更喜欢现代的 $(command substitution) 语法,并且实际上可能不推荐 expr。哦,还有absolutely quote the string variable. 无论如何,这并不是对 OP 代码的真正改进。
猜你喜欢
  • 2021-03-12
  • 1970-01-01
  • 2017-08-19
  • 2012-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-26
  • 2017-10-11
相关资源
最近更新 更多