从文本文件中读取时,如何在korn shell中分配包含*的变量

时间:2014-06-13 13:53:29

标签: shell scripting

我正在尝试编写一个使用'驱动程序文件' (文本文件)条目类似于: -

$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以及上面的方法,但它们都扩展了 关于如何实现我需要做的事情的任何想法?

1 个答案:

答案 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