Я практиковал для
управления потоком, ссылаясь на пример сценария вроде;
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 /
.
ВОПРОС =====
Как я могу включить подстановочный знак в переменной для расширения?
Или я неправильно понимаю, что означает пример кода справочного сайта?
====== =======
Спасибо, что прочитали мой вопрос!
Вы можете использовать переменную 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