Сохранить результат поиска как переменную в сценарии оболочки [дубликат]

На этот вопрос уже есть ответ здесь:

Я хочу найти путь к файлу и сохранить этот вывод в переменной в сценарии оболочки. В частности, в оболочке bash, если я напишу

GCC_VERSION="find *-gcc"

Then

echo ${GCC_VERSION}

Prints

find some-gcc

Как мне заставить переменную GCC_VERSION просто удерживать вывод find ? Вот как мне сохранить вывод команды find * -gcc в переменной GCC_VERSION , чтобы

echo ${GCC_VERSION}

напечатал

some-gcc
5
задан 5 April 2018 в 02:17

2 ответа

Во-первых, ваша команда find неверна. Если вы хотите найти все файлы, которые заканчиваются на -gcc в текущем каталоге, это должно быть:

$ find . -type f -name "*-gcc"

Для сохранения вывода с find в GCC_VERSION используйте process substitution [ 119]:

$ GCC_VERSION=$(find . -type f -name "*-gcc")

Обратите внимание, что у вас может быть несколько файлов, оканчивающихся на -gcc, поэтому заключите имя переменной в двойную кавычку:

$ echo "$GCC_VERSION"
./mipsel-linux-gnu-gcc
./aarch64-linux-gnu-gcc
./mips-linux-gnu-gcc
./arm-linux-gnueabihf-gcc
11
ответ дан 23 November 2019 в 08:43

Необходимо использовать назад галочки

VARIABLE=`Command`

или лучше рекомендуемый новый стиль управляет синтаксисом замены

VARIABLE=$(Command)

В то время как обе формы поддерживаются, существуют ограничения к встраиванию сценария в первого.

Кавычка от выпуска Выпуска 7, 2018 Спецификаций Основы Open Group:

"$ ()" форма замены команды решает проблему непоследовательного поведения при использовании одинарных левых кавычек. Например:

                Command               Output
                echo '\$x'              \$x
                echo `echo '\$x'`       $x
                echo $(echo '\$x')      \$x

Кроме того, backquoted синтаксис имеет исторические ограничения на содержание встроенной команды. В то время как более новый "$ ()" форма может обработать любой вид действительного встроенного сценария, форма backquoted не может обработать некоторые действительные сценарии, которые включают одинарные левые кавычки. Например, эти в других отношениях действительные встроенные сценарии не работают в левом столбце, но действительно работают справа:

echo `                        echo $(
cat <<\eof                    cat <<\eof 
a here-doc with `             a here-doc with )
eof                           eof
`                             )

... конец кавычки.

3
ответ дан 23 November 2019 в 08:43

Другие вопросы по тегам:

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