簡體   English   中英

bash腳本:如何測試列表成員資格

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM