Проверка порядка пунктов в переменной среды оболочки

В отличие от основанных на DOS Ose, в расширениях файла Unix и Linux главным образом бессмысленны за пределами человекочитаемых причин. INI является стандартом конфигурационного файла.

A. файл conf мог быть файлом INI, или это могла быть любая другая система конфигурации что поддержка приложений. MySQL, например, использует файл my.cnf по умолчанию для конфигурации, которая является файлом INI.

2
11.10.2013, 13:26
1 ответ

POSIXly:

$ awk 'BEGIN{
  n = split(ENVIRON["PATH"], p, ":")
  while (n) i[p[n]]=n--
  if (! (ARGV[1] in i))
    print ARGV[1], "is not in $PATH"
  else if (! (ARGV[2] in i))
    print ARGV[2], "is not in $PATH"
  else if (i[ARGV[1]] < i[ARGV[2]])
    print ARGV[1], "is before", ARGV[2]
  else
    print ARGV[1], "is after", ARGV[2]
  exit}' /bin /usr/bin
/bin is after /usr/bin

Для Вашего определенного примера:

check_order() (
  test_seen=false non_test_seen=false
  IFS=:; set -f
  for i in $1; do
    case $i in
      (*test*)
        if $non_test_seen; then
          echo "there are some non-tests before some tests"
          return
        fi
        test_seen=true;;
      (*)
        non_test_seen=true
    esac
  done
  if $test_seen; then
    echo "tests are all first"
  else
    echo "no tests in there"
  fi
)
check_order "$LIST"
7
27.01.2020, 21:53
  • 1
    С Вашим примером Awk было бы возможно передать его входная форма stdin вместо того, чтобы брать от среды? –  Sonny Ordell 11.10.2013, 13:55
  • 2
    @SonnyOrdell getline получить строку от stdin. Как getline a; getline b и замена ARGV[1] с a и ARGV[2] с b. –  Stéphane Chazelas 11.10.2013, 15:15

Теги

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