$package=br.com.example.pc1.test
search=$(adb shell pm list packages | grep "$package")
br.com.example.pc1 - 匹配:(
br.com.example.pc1.test - 匹配:)
我想用数学来完成它:br.com.example.pc1.test
我试过" $ package $"进入终点但不能正常工作
答案 0 :(得分:1)
假设您希望使用grep
匹配变量值字面:使用-F
选项执行 literal 子字符串搜索(而不是将搜索字符串解释为正则表达式,默认情况下grep
执行此操作:
package='br.com.example.pc1.test'
search=$(adb shell pm list packages | grep -F "$package")
请注意,这将在每一行执行 substring 搜索。
如果您的意图是完全匹配'br.com.example.pc1.test'
(即,仅当整个输入行匹配时),请添加-x
:
package='br.com.example.pc1.test'
search=$(adb shell pm list packages | grep -Fx "$package")
如果您的目的是将开始的子字符串与br.com.example.pc1.test
匹配,但包含其他组件,只需将.
附加到搜索字符串:
package='br.com.example.pc1.test'
search=$(adb shell pm list packages | grep -F "$package.")
但是,在 br.com.example.pc1.test
之前,它仍会匹配带有字符的行。
要确保搜索字符串仅匹配行开头,您需要一个带锚^
的正则表达式:
package='br.com.example.pc1.test'
search=$(adb shell pm list packages | grep "^${package//./\\.}\.")
请注意Bash参数扩展${package//./\\.}
如何用于转义.
字符。在变量值\.
中,以确保grep
在正则表达式的上下文中将它们视为文字 .
字符。
答案 1 :(得分:0)
awk
救援。我想你想要正则表达式反过来,试试这个而不是grep
$ search=$(adb shell pm list packages | awk -v k=$package 'k~$0')
或者只是将您的包定义更改为子字符串br.com.example.pc1