假设我将变量声明var
为var="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
在$option
是str1
或 时返回str2
,It works! 2
在 是$option
或str3
时返回str4
。这是因为我正在编写一个函数,在这种情况下,模式可能会根据用户输入而改变。
虽然我认为了解这些并不重要,但我lxterminal
在 Lubuntu 12.04 上使用$BASH_VERSION
过4.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