在for循环中仅获取变量中的文件名

Get only file name in variable in a for loop

我有一个用于在文件中写入文本的 for 循环:

for f in $DATA_DIRECTORY 
do 
    echo ' input.'$f '{'
    echo '  copy = ${source.copy}"'$f'.CPY"'
    echo '  data = ${source.data}"'$f'.CSV"'
    echo ' }'
done

但是这里的“f”变量看起来像这样:

/path/to/my/file/FILE.TXT

我要获取的只是文件名,不是完整路径和扩展名:

FILE

顺便说一下,我试图像这样更改我的 f 变量,所以我没有得到扩展名,但它没有用:

{$f%%.*}

你需要两行;不允许链式运算符。

f=${f##*/}  # Strip the directory
f=${f%%.*}  # Strip the extensions

或者,您可以使用 basename 命令在一行中删除目录和一个扩展名(假设您知道它是什么)。

f=$(basename "$f" .txt)