bash: 检查字符串是否以 "/*" 开头

3

在bash脚本中,我需要检查字符串$HEADER是否以字符序列"/*"开头。我尝试了以下方法:

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

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

我该如何保护字符 / 和 * 以避免被Shell解释?

使用反斜杠来保护字符也无法生效。

4个回答

10

这应该可以正常工作:

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

另一个解决方案是:

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

或者

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

4
问题在于命令替换的结果会受文件名生成的影响。您需要引用该结果以及命令替换中$HEADER的扩展。
if [ "$(echo "$HEADER" | cut -c 1-2)" = '/*' ]

由于您正在使用 bash,因此使用 [[ 命令(可以执行模式匹配)是一种更优秀的解决方案,正如 Jahid 已经回答的那样(链接)

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

2

这应该有所帮助

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

1

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

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

不使用外部工具(不包括[)或bashisms,即可与 POSIX shells配合使用。

有趣的是,这种方法在标记的重复内容中缺失。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接