关于shell:bash:检查字符串是否以“/ *”开头

bash: check if string starts with “/*”

本问题已经有最佳答案,请猛点这里访问。

在bash脚本中,我需要检查字符串$HEADER是否以字符序列"/*"开头。我在尝试:

1
if [ $(echo $HEADER | cut -c 1-2) = '/*' ]

它不能按预期工作。该字符串似乎与根目录的文件列表进行了比较。

我如何保护字符/和*不被shell解释?

用反斜杠保护字符也不起作用。


这应该有效:

1
if [[ $HEADER = '/*'* ]]

另一个解决方案是:

1
if ["${HEADER:0:2}" = '/*' ]

1
if [["${HEADER:0:2}" = '/*' ]]

问题是,命令替换的结果受文件名生成的影响。您需要引用它,以及在命令替换中扩展$HEADER

1
if ["$(echo"$HEADER" | cut -c 1-2)" = '/*' ]

由于您使用的是bash,所以使用[[命令(它可以执行模式匹配)是一个更好的解决方案,正如jahid已经回答的那样。

1
if [[ $HEADER = '/*'* ]]


你已经有了一些解决方案,但是

1
["${HEADER#/\*}" !="${HEADER}" ]

在不使用外部工具(不包括[)或bashims的情况下使用posix shell。

有趣的是,这个方法在标记的副本中丢失了。


这应该有帮助

1
if [[ $(echo $HEADER | grep -E '^\/\*' | wc -l) -gt 0 ]]