Shell参数扩展:如果没有目录部分,如何获取文件名?
我正在写一个makefile,假设我有以下内容:Shell参数扩展:如果没有目录部分,如何获取文件名?,shell,makefile,variable-expansion,Shell,Makefile,Variable Expansion,我正在写一个makefile,假设我有以下内容: FILES = file1.py \ folder1/file2.py \ folder2/file3.py 我有以下for循环: -@for file in $(FILES); do \ echo $${file/folder1\/}; \ done 以上将打印: file1.py file2.py folder2/file3.py 我想要的输出是: file1.py file2.py
FILES = file1.py \
folder1/file2.py \
folder2/file3.py
我有以下for循环:
-@for file in $(FILES); do \
echo $${file/folder1\/}; \
done
以上将打印:
file1.py
file2.py
folder2/file3.py
我想要的输出是:
file1.py
file2.py
file3.py
我已经看过一些关于shell扩展的文档,但还没有找到一种方法来处理这个问题。我可以知道如何更改代码以获得正确的输出吗?任何帮助都将不胜感激
编辑:语法尝试使用
echo$${file##*/}
。这将只给出文件名部分,不包含最后一个斜杠。您已经接受了@Jens的shell风格的答案,但我将建议一个解决方案:
-@for file in $(notdir $(FILES)); do \
echo $${file}; \
done
您是否忘记了
文件=
行中的反斜杠?你忘了回声后面的分号了吗?哦,对不起,我忘了把它们加进去,但我确实把它们写在了生成文件中。很抱歉给您添麻烦。非常感谢!顺便问一下,我能知道在哪里可以找到与此相关的信息吗?我在网上找不到任何有用的资源。我不认为每次我有这样的问题时都应该在StackExchange上提问。它应该在您的sh/ksh/bash/zsh手册的“参数扩展”下。请注意,make
使用/bin/sh
而不是登录shell来运行命令/bin/sh
可能是伪装的狂欢。用于参数扩展的POSIX规范如下所示