在bash中,我想获取以下唯一子文件夹的名称a
:
cd /tmp; mkdir -p a/b; v=$(ls -1 a); echo "$v"
输出:
b
这就是我想要的。
这行得通,因为我知道里面只有一个子文件夹a
。
随意假设在我的场景中的所有情况下都可以保证这一点。
让我感到不安的是,这个来自Bash pitfalls的建议
In addition to this, the use of ls is just plain unnecessary.
It's an external command whose output is intended specifically
to be read by a human, not parsed by a script.
这更加令人生畏和精巧(来自与上面相同的链接):
解析 ls 的输出——一个永远不应该解析其输出的实用程序。
它引起了我的共鸣,但这是尝试使用bash globbing,obv。不起作用:
cd /tmp; mkdir -p a/b; v=a/*; echo "$v"
输出:
a/*
悲伤。
那么,我怎样才能得到一个变量赋值的通配符呢?
我想我知道如何在分配之外利用globbing ..
for d in a/*; do echo "$(basename $d)"; done
输出:
b
“正确答案”(TM)。
请您教我如何正确执行此操作并解释其背后的原理,好吗?
** 注意:我不喜欢这个命令的输出:**
cd /tmp; w='name with blanks'; mkdir -p "$w/b"; v=$(echo "$w"/*); echo "$v"
这是:
name with blanks/b
我只想得到:
b
之后我必须使用basename
,还是我可以b
直接得到,不知何故?