Bash スクリプト: フロー制御のために変数内のワイルドカードを展開できるようにするにはどうすればよいでしょうか?

Bash スクリプト: フロー制御のために変数内のワイルドカードを展開できるようにするにはどうすればよいでしょうか?

for次のようなサンプル スクリプトを参照してフロー制御を練習しました。

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

次に、変数内のワイルドカードがforフロー制御でどのように動作するかを確認するために、以下の行を試しました。

#!/bin/bash

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

ワイルドカードを展開して、 内のすべてのファイルを~/bin/出力として表示したかったのですが、それは実現しませんでした。出力は だけです~/bin/*

変数を使用せず、~/bin/*のリストに直接割り当てるとfor、期待どおりに 内のすべてのファイル~/bin/が表示されます。

質問=====

変数内のワイルドカードを展開できるようにするにはどうすればいいですか?

それとも、参考サイトのサンプルコードの意図を誤解しているのでしょうか?

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

私の質問を読んでいただきありがとうございます!

答え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引用符で囲まれている場合は展開されないので、3 番目のオプションとして以下を使用します。

#!/bin/bash

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

そして@bac0n が言及したようにここでは引用符は必要ないので、次のようにも使用できます。

#!/bin/bash

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

関連情報