变量值中的特殊字符被转义

变量值中的特殊字符被转义

假设我将变量声明varvar="ls | grep a"。那么我期望命令$var能够完全按照一样工作ls | grep a,但是|字符却被读取为转义字符,\|因此它会打印一条错误,指出未找到名为\|grep的文件。a

我的问题是:如何让 Bash 将 的值解释|var未转义?

我必须在case如下语句中使用它

var1="str1|str2"
var2="str3|str4"
case $option in
  ${var1} ) echo "It works! 1" ;;
  ${var2} ) echo "It works! 2" ;;
  *  ) echo "It does not work"
esac

(编辑2):并使其It works! 1$optionstr1或 时返回str2It works! 2在 是$optionstr3时返回str4。这是因为我正在编写一个函数,在这种情况下,模式可能会根据用户输入而改变。

虽然我认为了解这些并不重要,但我lxterminal在 Lubuntu 12.04 上使用$BASH_VERSION4.2.25(1)-release

任何帮助都将不胜感激,谢谢!

答案1

如果我理解了你的问题,这可能就是你所希望的:

#!/bin/bash

var="a|b"
first_option=$(echo $var | cut -d"|" -f1)
second_option=$(echo $var | cut -d"|" -f2)

is_working? () {
  case $1 in 
    $first_option ) echo "It works!" ;;
    $second_option ) echo "It also works!" ;;
    *  ) echo "It does not work"
  esac
}

#1
option=a
is_working? $option

#2
option=b
is_working? $option

#2
option=c
is_working? $option

相关内容