Как установить переменную для вывода команды в Bash? - PullRequest
1367 голосов
/ 10 января 2011

У меня есть довольно простой скрипт, который выглядит примерно так:

#!/bin/bash

VAR1="$1"
MOREF='sudo run command against $VAR1 | grep name | cut -c7-'

echo $MOREF

Когда я запускаю этот скрипт из командной строки и передаю ему аргументы, я не получаю никакого вывода.Однако, когда я запускаю команды, содержащиеся в переменной $MOREF, я могу получить вывод.

Как можно получить результаты команды, которая должна быть запущена в скрипте, сохранить ее впеременная, а затем вывести эту переменную на экран?

Ответы [ 14 ]

6 голосов
/ 11 мая 2015

Это другой способ, который хорошо использовать с некоторыми текстовыми редакторами, которые не могут правильно выделить каждый сложный код, который вы создаете.

read -r -d '' str < <(cat somefile.txt)
echo "${#str}"
echo "$str"
4 голосов
/ 22 июня 2016

Вот еще два способа:

Имейте в виду, что пространство очень важно в .Итак, если вы хотите, чтобы ваша команда выполнялась, используйте как есть, не вводя больше пробелов.

  1. После этого Harshil присваивается L и затем печатает его

    L=$"harshil"
    echo "$L"
    
  2. после присваивает вывод команды tr L2.tr работает с другой переменной L1.

    L2=$(echo "$L1" | tr [:upper:] [:lower:])
    
4 голосов
/ 22 ноября 2015

Некоторые могут найти это полезным. Целочисленные значения в подстановке переменных, где трюк использует $(()) двойные скобки:

N=3
M=3
COUNT=$N-1
ARR[0]=3
ARR[1]=2
ARR[2]=4
ARR[3]=1

while (( COUNT < ${#ARR[@]} ))
do
  ARR[$COUNT]=$((ARR[COUNT]*M))
  (( COUNT=$COUNT+$N ))
done
0 голосов
/ 24 июня 2019

Если команда, которую вы пытаетесь выполнить, дает сбой, она записывает вывод в поток ошибок и затем выводится на консоль.Чтобы этого избежать, необходимо перенаправить поток ошибок

result=$(ls -l something_that_does_not_exist 2>&1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...