请不要采取错误的方式,但在有人回答并告诉我应该使用数组之前,我正在寻找以下代码无效的原因,而不是'如何正确地执行此操作”。 我在互联网上搜索了这个原因。
在bash中给出:
/home/user/abc*.cfg
返回/home/user/abc-def.cfg
为什么不展开*以提供file=$HOME/$(ls -1 $HOME|grep $1)
?
解决方法:
java.nio.ByteBuffer
不优雅。
背景:我知道只有一个文件以'abc'开头,但文件名的其余部分可能会有所不同,我不关心,只是初始标识符(上面的例子中为abc)。
最后,很棒的论坛,使用它很多,但这是我第一次没有找到答案,所以我的第一篇帖子 - 善良: - )
答案 0 :(得分:1)
适合我。
$ function fn1 {
> file=$HOME/$1*.cfg
> echo $file
> }
$
$ touch $HOME/abc-def.cfg
$ fn1 abc
/home/jackman/abc-def.cfg
然而,如果我禁用文件名扩展,我会看到您的结果:
$ set -f
$ fn1 abc
/home/jackman/abc*.cfg
你事先做过set -f
吗?如果您想在功能中考虑到这一点:
function fn1 {
local filename_expansion_disabled
[[ $- == *f* ]]; filename_expansion_disabled=$?
local file=$HOME/"$1"*.cfg
[[ $filename_expansion_disabled -eq 0 ]] && set +f
echo $file
[[ $filename_expansion_disabled -eq 0 ]] && set -f || true
}
然后
$ set +f
$ fn1 abc
/home/jackman/abc-def.cfg
$ set -f
$ fn1 abc
/home/jackman/abc-def.cfg
在子shell中运行该函数具有相同的效果,并且以不显着的性能损失为代价更简单:
fn1() (
file=$HOME/"$1"*.cfg
set +f
echo $file
)