【问题标题】:How to compare variables containing double quotes如何比较包含双引号的变量
【发布时间】:2015-11-09 18:44:10
【问题描述】:

我正在尝试:

FOO='Hi" a/b/c:'
BAR='hello'

if [ "$FOO" == "$BAR" ] ; then
  echo "yes"
fi

但是,由于 $FOO 中的 " 之后出现的内容,我得到的是一个错误。 如何转义变量中的 "?或者强制 bash 真正按原样比较变量?

【问题讨论】:

  • 无法复制。 究竟有什么错误?
  • 你在真实代码中使用if [ $FOO == $BAR ];吗?
  • 顶部有#!/bin/bash 吗?如果不是,你的外壳是什么?它可能不是 bash。

标签: bash shell escaping string-comparison


【解决方案1】:

您没有在bash 下运行脚本。 Bash 会接受这种非标准语法。其他贝壳可能会拒绝。例如,比较 bash 和 dash:

$ bash script.sh 
$ dash script.sh 
script.sh: 4: [: Hi" a/b/c:: unexpected operator

如此处所示,您的脚本可以在 bash 下运行,但不能在 dash 下运行。问题是意外的运算符。那是指非POSIX的==。解决方案是(a)在 bash 下运行,或(b)替换:

if [ "$FOO" == "$BAR" ] ; then

与:

if [ "$FOO" = "$BAR" ] ; then

在[...] 中,符号= 是用于字符串相等的标准符号。

【讨论】:

    猜你喜欢
    • 2012-09-22
    • 1970-01-01
    • 2018-09-02
    • 2018-03-24
    • 1970-01-01
    • 2013-07-19
    • 1970-01-01
    • 1970-01-01
    • 2021-01-21
    相关资源
    最近更新 更多