在Bash中检查变量字符串是否存在于目标字符串的问题求助
问题原因及解决方法
错误点分析
- 变量赋值语法错误:你定义
string1时用了string1 = "...",Shell中等号两边不能有空格,这种写法会让Shell把string1当成命令执行,导致变量根本没被正确赋值。 - 变量引用未加引号:
echo $string1没有用引号包裹变量,Shell会对变量内容做分词、空白压缩处理,破坏原字符串结构,同时如果变量包含特殊字符会引发意外解析。
正确操作步骤
1. 正确定义string1
string1="Hello there, my name is Jack. Hello there, my name is Jack. Hello there, my name is Jack."
2. 读取输入字符串
read string2
3. 正确匹配字符串
用引号包裹所有变量,避免Shell解析干扰:
output=$(echo "$string1" | grep -o "$string2") echo "$output"
或者更高效的写法(无需echo,用here-string传递输入):
output=$(grep -o "$string2" <<< "$string1") echo "$output"
验证结果
当输入string2="name"时,上述命令会输出三次name(对应原字符串中的三处匹配)。
内容的提问来源于stack exchange,提问作者SRIVIDYA REDDY
相关产品推荐
相关产品推荐

