比方說,我有這樣的目錄結構:Bash腳本 - 如何填充數組?
DIRECTORY:
.........a
.........b
.........c
.........d
我想要做的是:我要存儲的目錄的數組中的元素
類似:array = ls /home/user/DIRECTORY
使array[0]
包含第一個文件的名稱(即「a」)
array[1] == 'b'
等
感謝您的幫助
比方說,我有這樣的目錄結構:Bash腳本 - 如何填充數組?
DIRECTORY:
.........a
.........b
.........c
.........d
我想要做的是:我要存儲的目錄的數組中的元素
類似:array = ls /home/user/DIRECTORY
使array[0]
包含第一個文件的名稱(即「a」)
array[1] == 'b'
等
感謝您的幫助
你不能簡單地做array = ls /home/user/DIRECTORY
,因爲 - 即使有正確的語法 - 它不會給你一個數組,但你必須解析,並Parsing ls
is punishable by law一個字符串。你可以,但是,使用內置的bash結構,以達到你想要的東西:
#!/usr/bin/env bash
readonly YOUR_DIR="/home/daniel"
if [[ ! -d $YOUR_DIR ]]; then
echo >&2 "$YOUR_DIR does not exist or is not a directory"
exit 1
fi
OLD_PWD=$PWD
cd "$YOUR_DIR"
i=0
for file in *
do
if [[ -f $file ]]; then
array[$i]=$file
i=$(($i+1))
fi
done
cd "$OLD_PWD"
exit 0
這個小腳本保存所有的常規文件的名稱(這意味着沒有目錄,鏈接,插座等),可以在$YOUR_DIR
中找到名爲array
的數組。
希望這會有所幫助。
它的工作原理,但只適用於文件。 我也想將一個目錄的名字存儲到數組中(如果有的話) – user1926550 2013-04-10 17:52:25
然後根據你的需要修改循環中的if。 – 2013-04-10 17:55:47
選項1,一個手動循環:
dirtolist=/home/user/DIRECTORY
shopt -s nullglob # In case there aren't any files
contentsarray=()
for filepath in "$dirtolist"/*; do
contentsarray+=("$(basename "$filepath")")
done
shopt -u nullglob # Optional, restore default behavior for unmatched file globs
選項2,使用bash陣列詭計:
dirtolist=/home/user/DIRECTORY
shopt -s nullglob
contentspaths=("$dirtolist"/*) # This makes an array of paths to the files
contentsarray=("${contentpaths[@]##*/}") # This strips off the path portions, leaving just the filenames
shopt -u nullglob # Optional, restore default behavior for unmatched file globs
這可能是有用的:http://tldp.org/LDP/abs/html /arrays.html。使用'for'循環遍歷'ls'的返回值。 – drewmm 2013-04-10 17:21:41
這可能也有幫助; http://stackoverflow.com/questions/9954680/how-to-store-directory-files-listing-into-an-array – 2013-04-10 17:22:43
目錄列表中的所有這些點意味着什麼? – 2013-04-10 17:26:21