我正在尝试编写一个使用'驱动程序文件' (文本文件)条目类似于: -
$INST_YOP/logs/ora/10.1.3/Apache/*.log
这是脚本的缩减版本,但说明了我需要做的事情: -
while read DATA
do
eval DATA=$DATA
echo "Data => "$DATA
DIR=$(dirname $DATA)
echo "Dir =>" $DIR
TMP_FILE_NAME="${DATA##*/}"
#TMP_FILE_NAME=$(echo $DATA| awk -F "/" '{ print $NF}')
echo " ***** TMP_FILE_NAME => " $TMP_FILE_NAME
if [[ -d $DIR ]]
then
cd $DIR
fi
cd $DIR
done < $HOME/scripts/APP_archive_list.DONOTREMOVE
我基本上想要分配变量TMP_FILE_NAME = * .log,我不希望shell扩展它。
我尝试在文本文件中转义*: -
$INST_YOP/logs/ora/10.1.3/Apache/\*.log
但它仍在扩展,我尝试了awk(上面)和basename以及上面的方法,但它们都扩展了 关于如何实现我需要做的事情的任何想法?
答案 0 :(得分:2)
当您分配给变量时,问题不在于*
已展开;当你扩展变量时,它会被扩展。始终引用参数扩展,除非您知道何时不参加。
while read DATA
do
echo "Data => $DATA"
DIR=$(dirname "$DATA")
echo "Dir => $DIR"
TMP_FILE_NAME="${DATA##*/}"
echo " ***** TMP_FILE_NAME => $TMP_FILE_NAME"
if [[ -d $DIR ]]
then
cd "$DIR"
fi
done < "$HOME"/scripts/APP_archive_list.DONOTREMOVE