Như tôi đã viết trong bình luận của mình, có một số ký tự đặc biệt cần được chăm sóc thêm khi làm việc tại dấu nhắc shell (hoặc trong các kịch bản shell). Một trong số đó là $
dấu hiệu, thường chỉ ra một biến. Nếu điều đó nên được thực hiện theo nghĩa đen, bạn cần phải thoát nó (hoặc gửi toàn bộ chuỗi bằng dấu ngoặc đơn). Quy tắc tương tự cho dấu ngoặc kép.
Lệnh của bạn sẽ trông như thế nào với một lối thoát $
, bạn đã có thể tìm thấy trong câu trả lời của eldarerathis :
shell@android:/ # am start -n com.android.settings/.Settings\$PowerUsageSummaryActivity
Lưu ý "dấu gạch chéo ngược" phía trước dấu $
- đó là dấu hiệu thoát. Sử dụng tương tự cho dấu ngoặc kép hoặc khoảng trắng, nếu lệnh của bạn bao gồm một số được thực hiện theo nghĩa đen, ví dụ
myscript.sh first\ parameter\!
myscript.sh "first parameter!"
cả hai sẽ làm như nhau: Tạo chuỗi thành một tham số. Trong ví dụ về am start
lệnh của bạn , đây là những gì đã xảy ra khi phân tích cú pháp:
- chỉ huy:
am
- tham số 1:
start
- tham số 2:
-S
- tham số 3:
com.android.settings/.Settings$PowerUsageSummaryActivity
- có một
$
, diễn giải: biến $PowerUsageSummaryActivity
không được đặt, nên trống
- kết luận: tham số 3 là
com.android.settings/.Settings
Cũng lưu ý rằng nếu bạn chạy trực tiếp thông qua adb shell
, lệnh đi qua vỏ phân tích hai lần, vì vậy bạn cần phải thoát khỏi hoặc trích dẫn lệnh một lần nữa , như thế này:
user@desktop:~$ adb shell am start -n 'com.android.settings/.Settings\$PowerUsageSummaryActivity'
'com.android.settings/.Settings$PowerUsageSummaryActivity'
- hoặc thoát khỏi cái$
tương tựcom.android.settings/.Settings\$PowerUsageSummaryActivity
- đó là những thứ thông thường phải làm trên vỏ khi xử lý các$
dấu hiệu bằng chữ không chỉ ra một biến?