bash:检查字符串是否以“/ *”开头
问题描述:
在bash脚本中,我需要检查字符串$HEADER
是否以字符序列“/ *”开头。我试图:bash:检查字符串是否以“/ *”开头
if [ $(echo $HEADER | cut -c 1-2) = '/*' ]
它没有按预期工作。看来该字符串与根目录的文件列表进行比较。
如何保护字符/和*以从shell中解释?
用反斜杠保护字符也不起作用。
答
问题是命令替换的结果受制于文件名称生成。您需要引用即,以及$HEADER
在命令替换中的扩展。
if [ "$(echo "$HEADER" | cut -c 1-2)" = '/*' ]
由于使用bash
,使用[[
命令(其可以执行图案匹配)是一种出色的解决方案,虽然,as Jahid has already answered。
if [[ $HEADER = '/*'* ]]
答
这应该工作:
if [[ $HEADER = '/*'* ]]
另一个解决方案是:
if [ "${HEADER:0:2}" = '/*' ]
或者
if [[ "${HEADER:0:2}" = '/*' ]]
答
这应该有助于
if [[ $(echo $HEADER | grep -E '^\/\*' | wc -l) -gt 0 ]]
答
你已经有一些解决方案,但
[ "${HEADER#/\*}" != "${HEADER}" ]
作品与POSIX shells无需使用外部工具(不包括[
)或bash化。
有趣的是,这种方法从标记的副本中丢失。