bash:如何检查字符串是否以'#'开头?

ram*_*rur 22 regex bash

在bash中,我需要检查字符串是否以"#"符号开头.我怎么做?

这是我的 -

if [[ $line =~ '#*' ]]; then
    echo "$line starts with #" ;
fi
Run Code Online (Sandbox Code Playgroud)

我想在一个文件上运行这个脚本,文件看起来像这样 -

03930
#90329
43929
#39839
Run Code Online (Sandbox Code Playgroud)

这是我的剧本 -

while read line ; do
    if [[ $line =~ '#*' ]]; then
        echo "$line starts with #" ;
    fi
done < data.in
Run Code Online (Sandbox Code Playgroud)

这是我的预期输出 -

#90329 starts with #
#39839 starts with #
Run Code Online (Sandbox Code Playgroud)

但我无法让它发挥作用,任何想法?

cho*_*oba 34

不需要正则表达式,模式就足够了

if [[ $line = \#* ]] ; then
    echo "$line starts with #"
fi
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用参数扩展:

if [[ ${line:0:1} = \# ]] ; then
    echo "$line starts with #"
fi
Run Code Online (Sandbox Code Playgroud)

  • @bitmask:不.这是使用`[[`. (3认同)

anu*_*ava 5

只需使用shell glob ==:

line='#foo'
[[ "$line" == "#"* ]] && echo "$line starts with #"
#foo starts with #
Run Code Online (Sandbox Code Playgroud)

保持#引用以阻止shell尝试解释为注释是很重要的.


Kri*_*ris 5

如果您除了接受的答案之外还想在“#”前面允许空格,您可以使用

if [[ $line =~ ^[[:space:]]*#.* ]]; then
    echo "$line starts with #"
fi
Run Code Online (Sandbox Code Playgroud)

有了这个

#Both lines
    #are comments
Run Code Online (Sandbox Code Playgroud)