Сохранить результат команды в переменную
У меня создание переменной LINEFIO=$($|iconv -f ‘windows-1251’ -t ‘UTF-8′) заканчивается сообщением line 282: $’\317\340\342\353\376\352\345\342\350\367’: команда не найдена хотя просто echo «$|iconv -f ‘windows-1251’ -t ‘UTF-8′» проходит на ура, в чем дело ? L
31 июл 2017 в 18:40
test=$(curl -I ya.ru) % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 —:—:— —:—:— —:—:— 0
16 янв 2020 в 7:37
@HelloKatty curl выводит в STDERR прогресс загрузки. Это не попадает в переменную. Рабочий пример: TEST=$(curl https://ya.ru) Теперь в переменной $TEST находится куча HTML: echo $TEST
19 янв 2020 в 18:52
Команду в обратные апострофы:
RESULT=`ibus engine` echo $RESULT
Отслеживать
ответ дан 3 янв 2019 в 12:44
61 6 6 бронзовых знаков
Устаревшая конструкция, но ответ правильный.
3 янв 2019 в 13:03
$ engine="ibus engine" $ $engine xkb:ru::rus
Отслеживать
ответ дан 8 июн 2014 в 8:19
dlarchikov dlarchikov
4,405 18 18 серебряных знаков 41 41 бронзовый знак
@dimka3210, объясните, пожалуйста зачем в начале каждой строки доллар. Где можно почитать про это? У меня так не работает
8 июн 2014 в 8:24
это приглашение терминала. i.imgur.com/ynvRkxh.png
8 июн 2014 в 8:33
Но это вы просто записали команду в переменную, а как мне записать результат команды, то есть xkb:ru::rus. Чтоб при echo «$engine» выдавало «xkb:ru::rus»?
8 июн 2014 в 8:39
Не смог написать. Апострофы съедаются. Вот скрин i.imgur.com/okyyNwn.png
8 июн 2014 в 8:43
это тоже оно. спсибо
9 июн 2014 в 5:03
Это то что я искал. Огромное спасибо! По незнаю допустил эту ошибку (только учусь) и не мог понять почему же у меня не работает переменная, почему не сравнивает. Было
dstring= sed -n '1p' < /root/together if [ "$dstring" = "$fstring" ]; then echo "All ok" else echo "Attention! Something has been changed." echo "$fstring (1)" echo "$dstring (2)" fi
fstring= "sed -n '1p' < /root/together-first" dstring= "sed -n '1p' < /root/together"
и ещё несколько разных вариантов. Когда стало по примеру ниже - у меня всё заработало как нужно и я наконец-то приблизился к завершению своего скрипта. Всем успехов!
fstring=$(sed -n '1p' < /root/together-first) dstring=$(sed -n '1p' < /root/together) if [ "$dstring" = "$fstring" ]; then echo "All ok" else echo "Attention! Something has been changed." echo "$fstring (1)" echo "$dstring (2)" fi
П.С. Много времени убил.
Как записать вывод команды в переменную bash
оператор присваивания ( пробельные символы до и после оператора -- недопустимы )
Обратите внимание: символ = может использоваться как в качестве оператора присваивания, так и в качестве оператора сравнения, конкретная интерпретация зависит от контекста применения.
Пример 4-2. Простое присваивание
#!/bin/bash # Явные переменные echo # Когда перед именем переменной не употребляется символ '$'? # В операциях присваивания. # Присваивание a=879 echo "Значение переменной \"a\" -- $a." # Присваивание с помощью ключевого слова 'let' let a=16+5 echo "Значение переменной \"a\" теперь стало равным: $a." echo # В заголовке цикла 'for' (своего рода неявное присваивание) echo -n "Значения переменной \"a\" в цикле: " for a in 7 8 9 11 do echo -n "$a " done echo echo # При использовании инструкции 'read' (тоже одна из разновидностей присваивания) echo -n "Введите значение переменной \"a\" " read a echo "Значение переменной \"a\" теперь стало равным: $a." echo exit 0
Пример 4-3. Присваивание значений переменным простое и замаскированное
#!/bin/bash a=23 # Простейший случай echo $a b=$a echo $b # Теперь немного более сложный вариант (подстановка команд). a=`echo Hello!` # В переменную 'a' попадает результат работы команды 'echo' echo $a # Обратите внимание на восклицательный знак (!) в подстанавливаемой команде #+ этот вариант не будет работать при наборе в командной строке, #+ поскольку здесь используется механизм "истории команд" BASH # Однако, в сценариях, механизм истории команд запрещен. a=`ls -l` # В переменную 'a' записывается результат работы команды 'ls -l' echo $a # Кавычки отсутствуют, удаляются лишние пробелы и пустые строки. echo echo "$a" # Переменная в кавычках, все пробелы и пустые строки сохраняются. # (См. главу "Кавычки.") exit 0
# Взято из /etc/rc.d/rc.local R=$(cat /etc/redhat-release) arch=$(uname -m)
| Назад | К началу | Вперед |
| Переменные и параметры. Введение. | Наверх | Переменные Bash не имеют типа |
Как записать вывод команды в переменную bash
Подстановка команд -- это подстановка результатов выполнения команды [1] или даже серии команд; буквально, эта операция позволяет вызвать команду в другом окружении. Классический пример подстановки команд -- использование обратных одиночных кавычек (`. `). Команды внутри этих кавычек представляют собой текст командной строки.
script_name=`basename $0` echo "Имя этого файла-сценария: $script_name."
rm `cat filename` # здесь "filename" содержит список удаляемых файлов. # # S. C. предупреждает, что в данном случае может возникнуть ошибка "arg list too long". # Такой вариант будет лучше: xargs rm -- < filename # ( -- подходит для случая, когда "filename" начинается с символа "-" ) textfile_listing=`ls *.txt` # Переменная содержит имена всех файлов *.txt в текущем каталоге. echo $textfile_listing textfile_listing2=$(ls *.txt) # Альтернативный вариант. echo $textfile_listing2 # Результат будет тем же самым. # Проблема записи списка файлов в строковую переменную состоит в том, # что символы перевода строки заменяются на пробел. # # Как вариант решения проблемы -- записывать список файлов в массив. # shopt -s nullglob # При несоответствии, имя файла игнорируется. # textfile_listing=( *.txt ) # # Спасибо S.C.
COMMAND `echo a b` # 2 аргумента: a и b COMMAND "`echo a b`" # 1 аргумент: "a b" COMMAND `echo` # без аргументов COMMAND "`echo`" # один пустой аргумент # Спасибо S.C.
Даже когда не происходит разбиения на слова, операция подстановки команд может удалять завершающие символы перевода строки.
# cd "`pwd`" # Должна выполняться всегда. # Однако. mkdir 'dir with trailing newline ' cd 'dir with trailing newline ' cd "`pwd`" # Ошибка: # bash: cd: /tmp/dir with trailing newline: No such file or directory cd "$PWD" # Выполняется без ошибки. old_tty_setting=$(stty -g) # Сохранить настройки терминала. echo "Нажмите клавишу " stty -icanon -echo # Запретить "канонический" режим терминала. # Также запрещает эхо-вывод. key=$(dd bs=1 count=1 2> /dev/null) # Поймать нажатие на клавишу. stty "$old_tty_setting" # Восстановить настройки терминала. echo "Количество нажатых клавиш = $." # $ = количество символов в переменной $variable # # Нажмите любую клавишу, кроме RETURN, на экране появится "Количество нажатых клавиш = 1." # Нажмите RETURN, и получите: "Количество нажатых клавиш = 0." # Символ перевода строки будет "съеден" операцией подстановки команды. Спасибо S.C.
dir_listing=`ls -l` echo $dir_listing # без кавычек # Вы наверно ожидали увидеть удобочитаемый список каталогов. # Однако, вы получите: # total 3 -rw-rw-r-- 1 bozo bozo 30 May 13 17:15 1.txt -rw-rw-r-- 1 bozo # bozo 51 May 15 20:57 t2.sh -rwxr-xr-x 1 bozo bozo 217 Mar 5 21:13 wi.sh # Символы перевода строки были заменены пробелами. echo "$dir_listing" # в кавычках # -rw-rw-r-- 1 bozo 30 May 13 17:15 1.txt # -rw-rw-r-- 1 bozo 51 May 15 20:57 t2.sh # -rwxr-xr-x 1 bozo 217 Mar 5 21:13 wi.sh
variable1=`# Выдержки из системного файла /etc/rc.d/rc.sysinit #+ (Red Hat Linux) if [ -f /fsckoptions ]; then fsckoptions=`cat /fsckoptions` . fi # # if [ -e "/proc/ide/$/media" ] ; then hdmedia=`cat /proc/ide/$/media` . fi # # if [ ! -n "`uname -r | grep -- "-"`" ]; then ktag="`cat /proc/version`" . fi # # if [ $usb = "1" ]; then sleep 5 mouseoutput=`cat /proc/bus/usb/devices 2>/dev/null|grep -E "^I.*Cls=03.*Prot=02"` kbdoutput=`cat /proc/bus/usb/devices 2>/dev/null|grep -E "^I.*Cls=03.*Prot=01"` . fiПример 14-1. Глупая выходка
#!/bin/bash # stupid-script-tricks.sh: Люди! Будьте благоразумны! # Из "Глупые выходки", том I. dangerous_variable=`cat /boot/vmlinuz` # Сжатое ядро Linux. echo "длина строки \$dangerous_variable = $" # длина строки $dangerous_variable = 794151 # ('wc -c /boot/vmlinuz' даст другой результат.) # echo "$dangerous_variable" # Даже не пробуйте раскомментарить эту строку! Это приведет к зависанию сценария. # Автор этого документа не знает, где можно было бы использовать #+ запись содержимого двоичных файлов в переменные. exit 0Пример 14-2. Запись результатов выполнения цикла в переменную
#!/bin/bash # csubloop.sh: Запись результатов выполнения цикла в переменную variable1=`for i in 1 2 3 4 5 do echo -n "$i" # Здесь 'echo' -- это ключевой момент done` echo "variable1 = $variable1" # variable1 = 12345 i=0 variable2=`while [ "$i" -lt 10 ] do echo -n "$i" # Опять же, команда 'echo' просто необходима. let "i += 1" # Увеличение на 1. done` echo "variable2 = $variable2" # variable2 = 0123456789 exit 0Подстановка команд позволяет существенно расширить набор инструментальных средств, которыми располагает Bash. Суть состоит в том, чтобы написать программу или сценарий, которая выводит результаты своей работы на stdout (как это делает подавляющее большинство утилит в UNIX) и записать вывод от программы в переменную.
#include /* Программа на C "Hello, world." */ int main()
bash$ gcc -o hello hello.c#!/bin/bash # hello.sh greeting=`./hello` echo $greetingbash$ sh hello.sh Hello, world.output=$(sed -n /"$1"/p $file) # К примеру из "grp.sh". # Запись в переменную содержимого текстового файла. File_contents1=$(cat $file1) File_contents2=$(<$file2) # Bash допускает и такую запись.
- Пример 10-7
- Пример 10-26
- Пример 9-26
- Пример 12-2
- Пример 12-15
- Пример 12-12
- Пример 12-39
- Пример 10-13
- Пример 10-10
- Пример 12-24
- Пример 16-7
- Пример A-19
- Пример 27-1
- Пример 12-32
- Пример 12-33
- Пример 12-34
Примечания
Замещающая команда может быть внешней системной командой, внутренней (встроенной) командой или даже функцией в сценарии.
| Назад | К началу | Вперед |
| Команды системного администрирования | Наверх | Арифметические подстановки |
Как присвоить вывод команды Linux переменной — bash
В Bash принято запускать команды Linux и записывать их вывод для последующего использования в сценарии. Вы можете назначить вывод команды переменной, используя подстановку команд, которая является функцией Bash, позволяющей выполнять команду и заменять ее выводом. Есть два способа назначить вывод переменной:
- Через подстановку команд
- Через обратные кавычки
1: Как использовать подстановку команд для назначения вывода команды Linux переменной
Один из способов назначить вывод команды Linux переменной в Bash — использовать подстановку команд с синтаксисом $(), и вот полный синтаксис для него:
Вот пример, который сохраняет выходные данные команды hostname в переменной, используя приведенный выше синтаксис:
# Assign the output of the 'hostname' command to the 'find_hostname' variable
# Print the value of the 'hostname' variable
echo "Your hostname is:” $find_hostname
В этом примере мы использовали команду hostname, чтобы получить имя текущего хоста, а затем присвоили вывод переменной find_hostname, используя подстановку команд. Наконец, мы напечатали значение переменной find_hostname с помощью команды echo:

2: Как использовать обратные кавычки для назначения вывода команды Linux переменной
Другой способ назначить вывод команды Linux переменной — использовать обратные апострофы (`) вместо круглых скобок, и ниже приведен синтаксис для этого:
Чтобы дополнительно объяснить, как использовать этот метод, я привел пример кода bash, который просто считывает путь или текущий каталог.
# Assign the output of the 'hostname' command to the 'find_hostname' variable
# Print the value of the 'hostname' variable
echo "Your hostname is:" $find_hostname
В этом примере мы использовали команду pwd, чтобы получить текущий рабочий каталог, а затем присвоили вывод переменной current_dir с помощью обратных кавычек. Наконец, мы напечатали значение переменной current_dir с помощью команды echo:

Заключение
Присвоение вывода команды Linux переменной — обычная задача в сценариях Bash, и ее можно выполнить с помощью подстановки команд с помощью круглых скобок или обратных кавычек. Используя эти методы, вы можете записывать выходные данные команды и использовать их в своих сценариях для выполнения различных задач. Вы можете использовать любой из этих трех методов для назначения вывода команды Linux переменной в Bash, в зависимости от ваших конкретных потребностей и предпочтений.
Все права защищены. © Linux-Console.net • 2019-2023