为啥ls -d */列出所有目录

ls -F会在目录名后面加/:

  -F, --classify[=WHEN] append indicator (one of */=>@|) to entries WHEN

但ls -d */是因为bash的expansion. 我们可以写个 ls.sh,其 echo $* 来证实这一点。

我们还可以如下,sadly我解释不动了:

$ ls -F
dir-a/  dir-b/  file-c

$ t=*/; echo $t dir-a/ dir-b/
$ t='*/'; echo $t dir-a/ dir-b/
$ t="*/"; echo $t dir-a/ dir-b/
$ echo */ dir-a/ dir-b/
$ echo '*/' */
$ echo "*/" */

https://www.gnu.org/software/bash/manual/html_node/Shell-Expansions.html

The order of expansions is:

  • brace expansion;
  • tilde (~) expansion,
  • parameter and variable expansion,
  • arithmetic expansion,
  • and command substitution (done in a left-to-right fashion);
  • word splitting;
  • filename expansion;
  • and quote removal.
posted @ 2025-11-10 01:23  华容道专家  阅读(1)  评论(0)    收藏  举报