在命令行上,如果我键入
adb -s "" shell
Run Code Online (Sandbox Code Playgroud)
我有一个外壳,但是如果我尝试在bash中这样做:
#!/bin/bash
ADB_ID=""
adb -s ${ADB_ID} shell
Run Code Online (Sandbox Code Playgroud)
我得到一个错误。我了解它没有传递$ {ADB_ID}的任何内容。我尝试将引号转义,这导致它查找名为“”的设备,这是不正确的。我也尝试过使用单引号和单转义的引号,两者都是错误的。如何在bash脚本中传递等效的命令行?
养成在变量周围(几乎)始终使用双引号的习惯:
adb -s "$ADB_ID" shell
Run Code Online (Sandbox Code Playgroud)
是你想要的。
报价是shell编程是一个讨论很多的话题。除了说:我不会在这里详细介绍:
如果您没有引用上面的变量,那么shell将看到以下内容:
adb -s shell
Run Code Online (Sandbox Code Playgroud)
并且没有办法知道在“ -s”和“ shell”之间应该有一些东西。
带引号的外壳会看到
adb -s "" shell
Run Code Online (Sandbox Code Playgroud)
很明显,那里有一个零长度的单词。
如需更多研究,https://stackoverflow.com/tags/bash/info是一个不错的起点。
对于此特定问题,BashPitfalls编号为2到5。