Специальные символы в значении переменной get escape

Скажем, я объявляю переменную 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

(edit2): и верните его It works! 1, если $option является либо str1, либо str2 и It works! 2, если является либо str3, либо str4. Это потому, что я пишу функцию, в которой случайные шаблоны могут меняться в соответствии с пользовательскими вводами.

Хотя я не думаю, что это важно знать, я использую lxterminal на Lubuntu 12.04 и 4.2.25(1)-release.

Любая помощь приветствуется, спасибо!

1
задан 24 January 2014 в 22:04

0 ответов

Другие вопросы по тегам:

Похожие вопросы: