Переменная оболочки Bash внутри переменных - PullRequest
0 голосов
/ 11 ноября 2011

Я почти уверен, что это можно сделать, но я не совсем уверен, каков правильный синтаксис:

dev=$(someprog1 -flag -flag);
tpcli=$(someprog2 -flag);
if [[ $tpcli = $(someprog3 -flag $dev -flag | grep stuff | cut -c 25-55) ]]; then
blah;
blah;

По сути, я хочу создать переменную и добавить ее в переменную рядом с оператором IF. Любая помощь будет очень признательна.

Ответы [ 2 ]

1 голос
/ 11 ноября 2011

Я не совсем уверен, что вы спрашиваете, но в том, что вы сделали, нет ничего плохого (за исключением того, что у меня никогда не было бы подоболочки внутри предложения if).

bos@bos:$ foo=42
bos@bos:$ [ $foo = $(echo 42) ] && echo yes || echo no
yes
bos@bos:$ [ $foo = $(echo 242) ] && echo yes || echo no
no
0 голосов
/ 11 ноября 2011

Это обычно работает; например попробовать

P=$(echo $PATH)

в случае сомнений - используйте фигурные скобки $ {PATH} и / или экранированные "- как для управления одним аргументом с пробелами или чем-то, что расширяется, и его пробелы рассматриваются как разделители между аргументами. ( путь не нужен в вашем примере, если мы предполагаем, что у нас нет имен файлов и что не с пробелами в них).

В качестве более крупного примера рассмотрим:

  #!/bin/sh
  dev=$(echo /dev/null)
  if [ $(cat $dev | wc -l) = "0" ]; then
      echo Fine
    exit 0
  else
      echo Now that is a surprize
  fi
  exit 1

который при запуске дает нам

  beeb-2:~ dirkx$ sh xx.sh
  Fine

или более сложный:

  beeb-2:~ dirkx$ sh -x xx.sh
  ++ echo /dev/null
  + dev=/dev/null
  ++ cat /dev/null
  ++ wc -l
  + '[' 0 = 0 ']'
  + echo Fine
  Fine
  + exit 0

так что это должно помочь вам найти проблему. Вы уверены, что нет места или транспозиции?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...