当前位置: 首页 > 知识库问答 >
问题:

Bash命令中单引号内变量的展开

印振国
2023-03-14

我想从一个bash脚本运行一个命令,该脚本有单引号和单引号内的一些其他命令和一个变量。

例如repo forall-c'...$variable'

repo forall -c '...."$variable" '

repo forall -c " '....$variable' "

" repo forall -c '....$variable' "

repo forall -c "'" ....$variable "'"

共有1个答案

艾英范
2023-03-14

在单引号内,所有的东西都保留在字面上,没有例外。

这意味着您必须关闭引号,插入某些内容,然后再次重新输入。

'before'"$variable"'after'
'before'"'"'after'
'before'\''after'

单词连接只是通过并列来完成的。正如您可以验证的那样,上面的每一行对shell来说都是一个单词。引号(单引号或双引号,视情况而定)不孤立单词。它们仅用于禁用各种特殊字符的解释,如空白、$······关于引用的好教程,请参见马克·里德的答案。同样相关:Bash中哪些字符需要转义?

script="echo \"Argument 1 is: $myvar\""
/bin/sh -c "$script"
myvar='foo"; echo "you were hacked'
script='echo "arg 1 is: $1"'
/bin/sh -c "$script" -- "$myvar"

请注意在对脚本的赋值中使用了单个刻度,这意味着它是按字面意思进行的,没有变量展开或任何其他形式的解释。

 类似资料:
  • 问题内容: 我现在想在“摘要”中添加一个变量$ {date}: 但是变量不会在bash中的单引号内扩展。 有可能这样做吗? 注意:GoogleCL是用python编写的命令行程序。我在使用Python 2.6的Ubuntu 10.10上。 问题答案: 我将在列表中添加另一个选项:将变量定义为换行符,然后在双引号中使用该变量。

  • 问题内容: 我有此命令可以执行我想要的操作,但无法在我的.bashrc中使用别名(请注意,它同时使用单引号和双引号): 我试过了: 还有一些其他没有运气的常识组合。.我知道bash带有引号是非常挑剔的。.因此,为它加上别名的正确方法是什么?为什么?谢谢 问题答案: 您只需要正确地转义即可。

  • 问题内容: 我正在寻找仅使用bash /标准Linux命令即可将字符串转换为以下内容的东西: Single-quotes surrounding a string should be removed Double-quotes surrounding a string should be removed Unquoted strings should remain the same Strings

  • 问题内容: 像这样将变量(例如)连接到现有字符串(例如)中是否更好: 或将变量嵌入到字符串中,如下所示: 还是使用像这样的函数更好: 就处理器时间/效率而言,哪个更好? 问题答案: 进行测试的每个人都得出结论,使用单引号在性能上略有提高。最后,单引号仅导致串联,而双引号则迫使解释器解析变量的完整字符串。 但是,这样做对于最终版本的PHP来说增加的负担很小,以致在大多数情况下,结论是这并不重要。 因

  • 问题内容: 我正在编写一个Shell脚本,在其中设置几个变量,其值是命令的输出。 我得到的错误是: 现在,我确实阅读了其他类似的问题,并在此基础上尝试了多种方法: 将命令分为两个调用 尝试使用反引号 尝试使用 但是在每种情况下,命令输出都会执行。如何使其停止执行命令输出并仅将其存储为变量?我需要这个来处理ZSH和BASH。 问题答案: 您可以使用或定义变量。 因此,您必须删除前导符号和周围的任何其

  • 问题内容: 我必须找到具有选定权限的文件,并列出它们及其编号。因此,我想将命令的结果传递给shell和下一个命令,该输出我想存储在变量中,以便以后可以很好地显示。我想吃点东西 但部分无效。请帮忙。 编辑 我知道我可以将命令的整个输出放到像这样的变量中 但是然后我只需要的结果。我如何从该变量中获得该数字?是否可以按相反的顺序显示它,先显示编号,然后显示列表? 问题答案: 复制到TTY(不是标准输出!

  • 问题内容: 假设是一个仅打印出参数的程序; 如何正确传递变量中带引号的参数?我正在尝试这样做; 但是,当我通过一个变量时,引号似乎被忽略了,所以我得到了; bash是否有可能像对待我自己一样在第一个代码块中输入引号? 问题答案: 我不知道你从哪里来的,但看来它坏了。这是用bash编写的正确方法: 这会将每个参数打印在单独的行中,以使它们更易于区分(当然,包含换行符的参数会出现问题,但我们不会传递此

  • 问题内容: 我想像这样在Bash中显示一个字符串 当然可以这样 但是如何在字符串周围使用单引号的同时完成此操作? 问题答案: 不起作用。但是以下工作原理: 在bash的手册页中: 即使在单引号之前加反斜杠,也不能在单引号之间引起单引号。 .... $’string’* 形式的单词经过特殊处理。该单词扩展为字符串,并按ANSI C标准的规定替换反斜杠转义字符。 *