我正在编写一个Korn Shell脚本,它将获取一个zip文件并将内容解压缩到一个目录中。
该文件可能并不总是在目录中,并且在名称中具有发布日期,例如ALLIANCEBANK_DELTA_20141004_ABE.zip
。
我写了一个快速脚本来检查文件的存在,用*
(ALLIANCEBANK_DELTA_*_ABE.zip
)替换日期。
如果我回显变量,它会扩展名称,但if语句不会扩展它。
#!/bin/ksh
ALLIANCE_BANKFILE=/swift0/usrdata/messages/FA_ALLIANCE_BANKFILE_OUT/ALLIANCEBANK_DELTA_*_ABE.zip
echo $ALLIANCE_BANKFILE
if [[ -e $ALLIANCE_BANKFILE ]]
then
print "$ALLIANCE_BANKFILE found"
else
print "$ALLIANCE_BANKFILE not found"
fi
running this gives me:
$ ./file-exists-test.ksh
/swift0/usrdata/messages/FA_ALLIANCE_BANKFILE_OUT/ALLIANCEBANK_DELTA_20141004_ABE.zip
/swift0/usrdata/messages/FA_ALLIANCE_BANKFILE_OUT/ALLIANCEBANK_DELTA_*_ABE.zip not found
答案 0 :(得分:1)
通配符的扩展在变量赋值中发生不。它确实发生在回声中,因为没有引用变量。
如果你有 ksh93 ,你可以这样做:存储文件名(可能有0个,1个或更多)
数组。使用~(N:pattern)
表单,这样如果没有匹配模式的文件,则模式将被空字符串替换(默认情况下:如果没有匹配的文件,则保留模式字符串)。
dir=/swift0/usrdata/messages/FA_ALLIANCE_BANKFILE_OUT
ALLIANCE_BANKFILES=( ~(N:$dir/ALLIANCEBANK_DELTA_*_ABE.zip) ) # use an array
if (( ${#ALLIANCE_BANKFILES[@]} == 0))
then
print "no ALLIANCE_BANKFILES found"
else
print "${#ALLIANCE_BANKFILES[@]} files found:"
printf "%s\n" "${ALLIANCE_BANKFILES[@]}"
fi