ตามที่ฉันเขียนในความคิดเห็นของฉันมีอักขระพิเศษบางอย่างที่ต้องการการดูแลเป็นพิเศษเมื่อทำงานที่ shell prompt (หรือในเชลล์สคริปต์) หนึ่งในนั้นคือ$
เครื่องหมายซึ่งโดยปกติจะระบุตัวแปร หากควรดำเนินการอย่างแท้จริงคุณจะต้องหลบหนีมัน (หรือล้อมรอบสตริงทั้งหมดด้วยคำพูดเดียว) กฎที่คล้ายกันสำหรับเครื่องหมายคำพูด
ลักษณะที่คำสั่งของคุณควรมีลักษณะเหมือนกับการหลบหนี $
คุณสามารถหาคำตอบของ eldarerathisได้แล้ว:
shell@android:/ # am start -n com.android.settings/.Settings\$PowerUsageSummaryActivity
สังเกตว่า "แบ็กสแลช" ด้านหน้า$
- นั่นคือสัญญาณการหลบหนี ใช้แบบเดียวกันสำหรับเครื่องหมายคำพูดหรือช่องว่างถ้าคำสั่งของคุณมีบางอย่างที่จะต้องดำเนินการอย่างแท้จริงเช่น
myscript.sh first\ parameter\!
myscript.sh "first parameter!"
ทั้งสองจะทำแบบเดียวกัน: การทำให้สตริงเป็นพารามิเตอร์เดียว ในตัวอย่างของam start
คำสั่งของคุณนี่คือสิ่งที่เกิดขึ้นกับการแยกวิเคราะห์:
- คำสั่ง:
am
- พารามิเตอร์ 1:
start
- พารามิเตอร์ 2:
-S
- พารามิเตอร์ 3:
com.android.settings/.Settings$PowerUsageSummaryActivity
- มี a
$
, การตีความ: $PowerUsageSummaryActivity
ไม่ได้ตั้งค่าตัวแปรว่างเปล่า
- ข้อสรุป: พารามิเตอร์ 3 คือ
com.android.settings/.Settings
โปรดทราบว่าหากคุณเรียกใช้งานโดยตรงผ่านadb shell
คำสั่งจะผ่านการแยกวิเคราะห์เชลล์สองครั้งดังนั้นคุณต้องหลีกเลี่ยงหรืออ้างอิงคำสั่งอีกครั้งเช่นนี้
user@desktop:~$ adb shell am start -n 'com.android.settings/.Settings\$PowerUsageSummaryActivity'
'com.android.settings/.Settings$PowerUsageSummaryActivity'
- หรือการหลบ$
เหมือนcom.android.settings/.Settings\$PowerUsageSummaryActivity
- ซึ่งเป็นสิ่งที่ปกติจะทำในเปลือกเมื่อจัดการกับตัวอักษร$
สัญญาณไม่ได้บ่งชี้ตัวแปร?