bash:检查字符串是否以“/ *”

时间:2016-05-06 12:40:00

标签: bash shell

在bash-script中,我需要检查字符串$HEADER是否以字符序列“/ *”开头。我在努力:

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

它没有按预期工作。似乎将字符串与根目录的文件列表进行比较。

如何保护字符/和*从shell中解释?

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

4 个答案:

答案 0 :(得分:6)

这应该有效:

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

另一种解决方案是:

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

或者

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

答案 1 :(得分:2)

问题是命令替换的结果取决于文件名的生成。您需要引用 ,以及命令替换中$HEADER的扩展。

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

由于您正在使用bash,因此使用[[命令(可以执行模式匹配)是一种更好的解决方案,as Jahid has already answered

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

答案 2 :(得分:1)

您已经有一些解决方案,但

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

适用于POSIX shells而无需使用外部工具(不包括[)或玄武。

有趣的是,标记的副本中缺少这种方法。

答案 3 :(得分:0)

这应该有帮助

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