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