Проблема с переменной в adb shell

#bash #shell #adb

#bash #оболочка #adb

Вопрос:

В bash, когда я набираю:

 $ echo 1 | while read L; do echo $L; done
  

Очевидно, что в результате я получил 1.

В оболочке adb я получил тот же результат.

Однако, если я введу следующее:

 $ adb shell "echo 1 | while read L; do echo $L; done"
  

Я ничего не получил!

Есть ли кто-нибудь, кто знает, почему я ничего не получил в приведенном выше?

Ответ №1:

Вы должны были получить новую строку из adb оболочки. Проблема в том, что оболочка, вызывающая adb shell "… echo $L; … строку, увидела $L и расширила ее до пустой строки, поэтому adb shell увидела командную строку:

 echo 1 | while read L; do echo; done
  

Используйте одинарные кавычки:

 adb shell 'echo 1 | while read L; do echo $L; done'
  

В качестве альтернативы, используйте изобретательный:

 L='$L'
adb shell "echo 1 | while read L; do echo $L; done"
  

Теперь вызывающая оболочка заменяет $L with $L , и все работает так, как задумано (но скорее по совпадению).