$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=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
我试试“$包$”,在最后一行来获得,但没有工作
awk
来救援。我猜你想要的正则表达式的工作周围的其他方法,尝试,而不是grep的这个
$ search=$(adb shell pm list packages | awk -v k=$package 'k~$0')
或只是你的包定义更改为子br.com.example.pc1
假设你想匹配一个变量的值字面上使用grep
:使用-F
选项,其执行一个字面字符串搜索(而不是解释搜索字符串作为正则表达式,其grep
默认完成):
package='br.com.example.pc1.test'
search=$(adb shell pm list packages | grep -F "$package")
注意,这将执行每行一个子搜索。
如果你的目的是要匹配'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//./\\.}\.")
注意如何猛砸参数扩展${package//./\\.}
被用来逃跑字符为.
。在变量值中为\.
以确保grep
将它们视为文字.
chars在正则表达式的上下文中。
你能再解释一下这个问题是什么吗?你匹配的结果你不想匹配? – NickLamp
另请注意,shell变量_assignments_不能是'$' - 前缀;你只能使用'''to _reference_变量。 – mklement0