BASH变量结合字符串值更改值

时间:2017-05-11 20:57:45

标签: bash shell

我试图编写一个bash脚本来查找文件夹中的所有.txt文件,获取基本名称,然后重新定位文件。但是,我有一个问题,即每当我尝试将文件名与字符串组合时,它会输出" * .txt"来自for循环的通配符,而不是它找到的实际文件。如果我只是回显变量,它会输出预期的文件名。

我在下面添加了一个简化的脚本及其生成的输出。我是BASH的新手,我认为这与处理变量的方式有关。我一直在寻找几个小时的解释,但我还没有想出任何东西。任何人都可以解释为什么连接时值会发生变化吗?

以下是示例代码:

TEMP_PATH=C/Test

for testFile in $TEMP_PATH/*.txt; do
    testFileName=$(basename "$testFile")
    echo $testFileName
    echo "FileName:$testFileName"
done

以下是每个echo的示例输出

TestOne.txt
FileName:*.txt

以下是目录中的文件。 TestingToo.sh是上面显示的脚本

TestingToo.sh  TestOne.txt

任何帮助将不胜感激!谢谢。

1 个答案:

答案 0 :(得分:1)

试试这个

#!/usr/bin/env bash

TEMP_PATH=~/temp
TARGET_PATH=~/temp2

filenames=`find "$TEMP_PATH" -name "*.txt" `

if [ -z "$filenames" ] ; then echo "files not found" ; exit ; fi

for testFile in $filenames; do
    testFileName=$(basename "$testFile")
    echo $testFileName
    mv "${testFile}" "${TARGET_PATH}/${testFileName}"
done