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

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

最佳答案

您的问题不是当您分配给变量时 * 被扩展;而是当您扩展变量时它也会扩展。始终引用参数扩展,除非您知道何时不这样做。

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

关于shell - 从文本文件读取时如何在 korn shell 中分配包含 * 的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24207038/

相关文章:

image - 将扩展名为 ".jpg"的一堆 PNG 图片重命名为 ".png"

macos - 从终端打开 Finder 并选择文件

linux - 如何打印特定行和列中的数字

bash - 使用 fd 嵌套 while 读取循环

html - 将 XElement 转换为 HTML 字符串

Perl 模块获取网站的所有页面?

c++ - 在 luabind::object 中存储一个带有父类的 lua 类

bash - 找到文件夹并 cd 进去

linux - 运行 chroot 命令时出现错误

windows - 以加密形式存储文本并在 powershell 脚本中使用而不向其他用户泄露?