在bash-script中,我需要检查字符串$HEADER
是否以字符序列“/ *”开头。我在努力:
if [ $(echo $HEADER | cut -c 1-2) = '/*' ]
它没有按预期工作。似乎将字符串与根目录的文件列表进行比较。
如何保护字符/和*从shell中解释?
使用反斜杠保护字符也不起作用。
答案 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 ]]