Оценка переменной чтения в той же строке в сценарии bash

Я пытаюсь получить значение этой команды в скрипте bash, но, похоже, ничего не возвращает

rr=$(read -p Enter -r) echo "Is $rr" read -p "java archive detected, Enter Y to download it again, N to continue $nl" -r if [[ $REPLY =~ ^[Yy]$ ]] && [[ $(read -p Enter -r) == "Y" ]]; then echo "Y entered $REPLY" break; elif [[ $REPLY =~ ^[Nn]$ ]]; then echo "java Archive was extracted successfully to $java8Dir $nl" fi 

  • извлечение данных из файла журнала и построение его с использованием Gnuplot
  • Навигация по истории в режиме Vi оболочки Bash
  • Как указать пользовательский автозаполнение для определенных команд?
  • Eval для имен файлов, зло?
  • pushd, popd vs cd, cd- in bash и zsh
  • Что означает «$ {x %% *}» в sh?
  • Как переместить несколько файлов и добавить расширение .pgp?
  • Получить список пакетов, которые не установлены в системе Debian
  • Используйте системную команду вместо встроенного Bash без указания полного пути
  • Найти количество элементов в массиве, на которые ссылается динамически созданное имя
  • Чтение .zshrc в X сеансе открыто? / Как выполнить скрипт в X сеансе открытия?
  • Почему SIGINT не работает в фоновом режиме в скрипте?
  • 3 Solutions collect form web for “Оценка переменной чтения в той же строке в сценарии bash”

    Это потому, что вы выполняете read в подстановке команд ( $() ). В этом нет необходимости. Просто используйте:

     read -p Enter -r rr echo "Is $rr" 

    Синтаксис var=$(command) установит значение var в значение, возвращаемое command . read встроенного языка ничего не возвращает (кроме его статуса выхода, но это не имеет значения здесь), поэтому ваша переменная остается пустой. Синтаксис read read VAR и он устанавливает значение $VAR .

    правильный синтаксис для read

    [-s] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [имя … ]

    (от man bash )

    • первая строка может быть read -p Enter -r rr (вам действительно нужно unescape backslash?)
    • внутренний тест должен читать

       if ... && [[ "$(read -p Enter R ; echo $R )" == "Y" ]] ; tehn 

    Команда read -p Enter -r поместит значение типа пользователя внутри переменной $ REPLY (в Bash). Итак, это сработает:

     $ read -p Enter: -r Enter:hello $ echo "$REPLY" hello 

    поэтому, если вы хотите ввести пользователя в var rr, сделайте следующее:

     $ read -p "Enter: " -r rr Enter: hello $ echo "$rr" hello 

    Или, как одна строка:

     $ read -p "Enter: " -r rr; echo "$rr" Enter: hello hello 

    Все, что вам нужно сделать (в скрипте), чтобы прочитать переменную, а затем распечатать ее, это:

     read -p "Enter : " -r rr echo "Is $rr" 
    Linux и Unix - лучшая ОС в мире.