
我想下載所有文件這個 GitHub 目錄到/usr/share/enlightenment/data/config
。我有這個腳本:
L=('e.cfg' 'e_randr.cfg' 'exehist.cfg' 'module.battery.cfg' 'module.clock.cfg' 'module.conf.cfg' 'module.everything-apps.cfg' 'module.everything-files.cfg' 'module.everything.cfg' 'module.gadman.cfg' 'module.ibar.cfg' 'module.notification.cfg' 'module.pager.cfg' 'module.syscon.cfg' 'module.tasks.cfg')
pushd /usr/share/enlightenment/data/config
for i in $L
do
sudo wget -c $JEF/$i #$JEF is defined in my ~/.bashrc script
done
popd
但它只是下載e.cfg
而已。
答案1
在bash
or中ksh
,您需要使用以下方法迭代數組的所有元素:
for i in "${L[@]}"; do wget ....; done
${L[@]}
將擴展到數組的所有元素L
並for
用於迭代這些元素。
如果您使用$L
is bash
or ksh
,它的行為就像${L[0]}
您的情況一樣,您將只獲得數組的第一個元素。
答案2
我自己透過查看找到了答案數組變數在 Bash 初學者指南。
腳本應該是這樣的:
L=('e.cfg' 'e_randr.cfg' 'exehist.cfg' 'module.battery.cfg' 'module.clock.cfg' 'module.conf.cfg' 'module.everything-apps.cfg' 'module.everything-files.cfg' 'module.everything.cfg' 'module.gadman.cfg' 'module.ibar.cfg' 'module.notification.cfg' 'module.pager.cfg' 'module.syscon.cfg' 'module.tasks.cfg')
pushd /usr/share/enlightenment/data/config
for i in ${L[*]}
do
sudo wget -c $JEF/$i
done
popd
答案3
這個怎麼樣?更少的引號、括號和方括號以及其他語法!
L='e.cfg e_randr.cfg exehist.cfg etc'
for i in $L
do
echo wget -c "$JEF/$i" #$JEF is defined in my ~/.bashrc script
done
這是最古老也是最常見的方法。更多人明白這一點。數組是我從未使用過的擴充。