$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