首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >怪异的"basename“行为

怪异的"basename“行为
EN

Stack Overflow用户
提问于 2022-08-28 17:17:21
回答 1查看 26关注 0票数 0

为何:

代码语言:javascript
复制
find ../ -type f | xargs -Ifilename echo "$(basename filename)"

代码语言:javascript
复制
find ../ -type f | xargs -Ifilename basename "$(echo filename)"

给出不同的输出?这可以在任何目录上运行。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-28 17:29:41

运行set -x下的命令可以告诉您:

代码语言:javascript
复制
set -x
diff <(find ../ -type f | xargs -If1 echo "$(basename f1)") <(find ../ -type f | xargs -If2 basename "$(echo f2)")
代码语言:javascript
复制
++ find ../ -type f
+ diff /dev/fd/63 /dev/fd/62
+++ basename f1
++ find ../ -type f
+++ echo f2
++ xargs -If2 basename f2
++ xargs -If1 echo f1

你可以看到“回声f1”。因此,在xargs -If1 echo "$(basename f1)"中,$(...)在 xargs之前运行(因为命令替换在运行命令之前发生)。basename f1的结果是f1,它作为参数发送给xargs,因此它打印路径。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73520708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档