Bash Script: Как включить подстановочный знак в переменной для расширения для потока control?

Я практиковал для управления потоком, ссылаясь на пример сценария вроде;

if [ $(id -u) = "0" ]; then
        dir_list="/home/*"
    else
        dir_list=$HOME
    fi
    for home_dir in $dir_list; do

Вышеупомянутое частично цитируется строки из «Управление потоком - Часть 3» http://linuxcommand.org/lc3_wss0130.php

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

#!/bin/bash

binlist="~/bin/*"
   
for i in $binlist; do
echo $i
done

Я хотел, чтобы подстановочный знак расширился, и все файлы в ~ / bin / отображались как выходные данные, но этого не произошло. Вывод будет просто ~ / bin / * .

Если я не использую переменную, и напрямую назначу ~ / bin / * в список для , как я и ожидал, отображаются все файлы в ~ / bin / .

ВОПРОС =====

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

Или я неправильно понимаю, что означает пример кода справочного сайта?

====== =======

Спасибо, что прочитали мой вопрос!

1
задан 23 August 2020 в 08:32

1 ответ

Вы можете использовать переменную bash для своего домашнего каталога вместо ~ .

Переменная bash для вашего домашнего каталога - $ HOME , поэтому ваш сценарий должен выглядеть так:

#!/bin/bash

binlist="$HOME/bin/*"
   
for i in $binlist; do
echo $i
done

В качестве альтернативы вы можете использовать / home / $ USER вместо $ HOME следующим образом:

#!/bin/bash

binlist="/home/$USER/bin/*"
   
for i in $binlist; do
echo $i
done

Вы можете просмотреть каждую из этих переменных выполнив следующие команды:

echo $HOME
echo $USER

Они перечислены в разделе «Переменные оболочки» на странице руководства bash.


Кроме того, , как указано @ John1024 , тильда не будет расширяться до $ HOME , если он заключен в кавычки, поэтому третий вариант будет использовать следующее:

#!/bin/bash

binlist=~/"bin/*"
   
for i in $binlist; do
echo $i
done
0
ответ дан 24 August 2020 в 08:20

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

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