我已經練習了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
也,正如@John1024所提到的,如果將波浪號放在引號內,波浪號將不會擴展為,$HOME
因此您的第三個選擇是使用以下內容:
#!/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