如何在bash脚本中传递字符串引号?

时间:2019-05-15 16:37:17

标签: bash

在命令行上,如果我键入

adb -s "" shell

我有一个外壳,但是如果我尝试在bash中这样做:

#!/bin/bash
ADB_ID=""
adb -s ${ADB_ID} shell

我得到一个错误。我了解它没有传递$ {ADB_ID}的任何内容。我尝试将引号转义,这导致它查找名为“”的设备,这是不正确的。我也尝试过使用单引号和单转义的引号,两者都是错误的。如何在bash脚本中传递等效的命令行?

2 个答案:

答案 0 :(得分:6)

养成在变量附近(几乎)始终使用双引号的习惯:

adb -s "$ADB_ID" shell

是您想要的。

报价是shell编程的话题。除了说:

  • shell使用某些扩展,包括变量扩展,之前将行标记为单词:命令及其参数。
  • shell使用空格序列分隔单词
  • 如果您不引用上面的变量,则外壳程序将显示以下内容:

    adb -s  shell
    

    并且无法知道在“ -s”和“ shell”之间应该有一些东西。
    带引号的外壳会看到

    adb -s "" shell
    

    很明显那里有一个零长度的单词。

要进行更多研究,https://stackoverflow.com/tags/bash/info是一个很好的起点。

对于此特定问题,BashPitfalls编号2到5。

答案 1 :(得分:0)

总是quote variables,除非您确切地知道自己在做什么。

adb -s "$ADB_ID" shell

shell扩展变量然后收集命令行参数,因此,如果存在未引用的空变量($ADB_ID),它将被忽略。引用空变量("$ADB_ID")时,与传递空字符串作为参数相同。

相关问题