bash: check if string starts with “/*”
本问题已经有最佳答案,请猛点这里访问。
在bash脚本中,我需要检查字符串
1 | if [ $(echo $HEADER | cut -c 1-2) = '/*' ] |
它不能按预期工作。该字符串似乎与根目录的文件列表进行了比较。
我如何保护字符/和*不被shell解释?
用反斜杠保护字符也不起作用。
这应该有效:
1 | if [[ $HEADER = '/*'* ]] |
另一个解决方案是:
1 | if ["${HEADER:0:2}" = '/*' ] |
或
1 | if [["${HEADER:0:2}" = '/*' ]] |
问题是,命令替换的结果受文件名生成的影响。您需要引用它,以及在命令替换中扩展
1 | if ["$(echo"$HEADER" | cut -c 1-2)" = '/*' ] |
由于您使用的是
1 | if [[ $HEADER = '/*'* ]] |
你已经有了一些解决方案,但是
1 | ["${HEADER#/\*}" !="${HEADER}" ] |
在不使用外部工具(不包括
有趣的是,这个方法在标记的副本中丢失了。
这应该有帮助
1 | if [[ $(echo $HEADER | grep -E '^\/\*' | wc -l) -gt 0 ]] |