[英]bash scripting: How to test list membership
(這是debian擠壓amd64)
我需要測試文件是否是文件列表的成員。 這么久我的(測試)腳本是:
set -x
array=$( ls )
echo $array
FILE=log.out
# This line gives error!
if $FILE in $array
then echo "success!"
else echo "bad!"
fi
exit 0
有任何想法嗎?
感謝所有的回復。 澄清一下:給出的腳本只是一個例子,實際問題更復雜。 在最終的解決方案中,它將在循環內完成,因此我需要測試的文件(名稱)是否在變量中。
再次感謝。 沒有我的測試腳本工作,並讀取:
in_list() {
local search="$1"
shift
local list=("$@")
for file in "${list[@]}" ; do
[[ "$file" == "$search" ]] && return 0
done
return 1
}
#
# set -x
array=( * ) # Array of files in current dir
# echo $array
FILE="log.out"
if in_list "$FILE" "${array[@]}"
then echo "success!"
else echo "bad!"
fi
exit 0
if ls | grep -q -x t1 ; then
echo Success
else
echo Failure
fi
grep -x
只匹配實線,所以ls | grep -x
如果文件存在, ls | grep -x
僅返回一些內容。
怎么樣
in_list() {
local search="$1"
shift
local list=("$@")
for file in "${list[@]}" ; do
[[ $file == $search ]] && return 0
done
return 1
}
if in_list log.out * ; then
echo 'success!'
else
echo 'bad!'
fi
編輯:使它不那么白痴。
編輯#2:當然,如果您正在查看當前目錄以查看特定文件是否存在,這實際上是上面所做的,那么您可以說
[ -e log.out ] && echo 'success!' || echo 'bad!'
如果您實際上正在做一些涉及文件列表的更復雜的事情,那么這可能還不夠。
如果您只想檢查文件是否存在,那么
[[ -f "$file" ]] && echo yes || echo no
如果您的數組包含通過除ls
之外的某些方式生成的文件列表,那么您必須迭代它,如Sorpigal所示。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.