我正在尝试编写一个使用“驱动程序文件”(文本文件)的内务脚本,条目将类似于:-
$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/