2016-05-06 78 views
-1

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

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

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

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

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

回答

1

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

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

由于使用bash,使用[[命令(其可以执行图案匹配)是一种出色的解决方案,虽然,as Jahid has already answered

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

这应该工作:

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

另一个解决方案是:

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

或者

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

这应该有助于

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

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

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

作品与POSIX shells无需使用外部工具(不包括[)或bash化。

有趣的是,这种方法从标记的副本中丢失。

相关问题