【发布时间】:2011-02-09 12:29:42
【问题描述】:
给定这样的文件名:
/the/path/foo.txt
bar.txt
我希望得到:
foo
bar
为什么这不起作用?
#!/bin/bash
fullfile=$1
fname=$(basename $fullfile)
fbname=${fname%.*}
echo $fbname
正确的做法是什么?
【问题讨论】:
-
只要
$1的值实际上是您认为的值,此代码在大多数情况下应该可以工作。但因quoting不当,以word splitting和filename expansion为准。 -
更接近 @tripleee:这不是 Extract filename and extension in Bash 的副本。另一个更复杂的 Q 要求扩展名和文件名分开。如果有的话,另一个问题是对这个更基本的问题的阐述。
-
@agc 答案似乎非常相似,但旧问题的答案更多。你能解释一下为什么你认为这些应该分开吗?
-
@tripleee 对更简单问题感兴趣的用户可能会被添加或解决更复杂问题所需的不同代码不必要地混淆。
-
您阅读其他问题的答案了吗?在前五名中,有四名非常清楚地展示了如何做到这一点,并解释了选项,其中大多数都非常简洁。如果您能指出实际差异,我很高兴被说服,但我没有看到它们。或许可以在 Meta Stack Overflow 上提出这个问题,以获得更广泛的知名度。