Seperti yang saya tulis dalam komentar saya, ada beberapa karakter khusus yang membutuhkan perhatian ekstra ketika bekerja di shell prompt (atau dalam skrip shell). Salah satunya adalah $
tanda, yang biasanya menunjukkan suatu variabel. Jika itu harus diambil secara harfiah, Anda harus menghindarinya (atau lampirkan seluruh string dengan tanda kutip tunggal). Aturan serupa untuk tanda kutip.
Bagaimana perintah Anda akan terlihat seperti dengan melarikan diri $
, Anda sudah dapat menemukan jawaban eldarerathis :
shell@android:/ # am start -n com.android.settings/.Settings\$PowerUsageSummaryActivity
Catat "back-slash" di depan $
- itulah tanda keluar. Gunakan hal yang sama untuk tanda kutip atau kosong, jika perintah Anda menyertakan beberapa yang harus diambil secara harfiah, misalnya
myscript.sh first\ parameter\!
myscript.sh "first parameter!"
keduanya akan melakukan hal yang sama: Membuat string menjadi parameter tunggal. Dalam contoh am start
perintah Anda , inilah yang terjadi pada parsing:
- perintah:
am
- parameter 1:
start
- parameter 2:
-S
- parameter 3:
com.android.settings/.Settings$PowerUsageSummaryActivity
- memiliki
$
, menafsirkan: variabel $PowerUsageSummaryActivity
tidak disetel, jadi kosong
- kesimpulan: parameter 3 adalah
com.android.settings/.Settings
Perhatikan juga bahwa jika Anda menjalankan ini langsung melalui adb shell
, perintah melewati parsing shell dua kali, jadi Anda perlu melarikan diri atau mengutip perintah lagi , seperti ini:
user@desktop:~$ adb shell am start -n 'com.android.settings/.Settings\$PowerUsageSummaryActivity'
'com.android.settings/.Settings$PowerUsageSummaryActivity'
- atau melarikan diri dari$
sejenisnyacom.android.settings/.Settings\$PowerUsageSummaryActivity
- yang merupakan hal yang biasa dilakukan pada shell ketika berhadapan dengan$
tanda - tanda literal yang tidak menunjukkan variabel?