【问题标题】:Check if a variable starts with colon `:` [closed]检查变量是否以冒号 `:` 开头 [关闭]
【发布时间】:2021-10-28 05:48:52
【问题描述】:

我想检查一个变量是否以冒号 : 开头。我可以做的事情 ===~ 但不知道是否更喜欢其中一个。

if [[ "$var" == :* ]]; then 

if [[ "$var" =~ ^:.* ]]; then

我倾向于前者,但后者的主要优势是什么。一个比另一个更可靠吗?

【问题讨论】:

  • 你的两个例子都没有问题,所以我会说这是偏好。可能存在一些性能差异,但这是否会在基准测试之外产生任何实际影响是值得怀疑的。
  • 第三个选项:获取第一个字符并检查它:[[ "${var:0:1}" == : ]]
  • .* 可以省略。
  • 第一个选项的变体可以在任何 POSIX 兼容的 shell 中工作:case $var of :*) ... ;; ; esac

标签: string bash


【解决方案1】:

就可读性而言,第一个似乎比第二个更容易理解。我不认为在这种情况下可靠性是一个值得担心的问题。除非您对它有很好的理解,否则我倾向于避免使用类似正则表达式的表达式。如果你对性能感兴趣,我做的快速测试似乎有类似的结果。

干杯

【讨论】:

  • 我做了一些快速的性能测试,发现== 版本比=~ 快。但是,如果性能对您来说很重要,那么 bash 无论如何都是错误的语言。
  • 我做的测试显示一个比另一个稍快,反之亦然,但我没有在多次试验中编译结果(这可以显示更好的结果)。我会这样做并发布结果,同时引用你的话。
猜你喜欢
  • 2011-05-24
  • 2017-06-23
  • 1970-01-01
  • 2020-01-07
  • 1970-01-01
  • 1970-01-01
  • 2012-02-05
  • 2014-11-28
  • 1970-01-01
相关资源
最近更新 更多