![echo 可以组合起来产生 .*/ 和 */ 的单个结果吗?](https://linux22.com/image/13525/echo%20%E5%8F%AF%E4%BB%A5%E7%BB%84%E5%90%88%E8%B5%B7%E6%9D%A5%E4%BA%A7%E7%94%9F%20.*%2F%20%E5%92%8C%20*%2F%20%E7%9A%84%E5%8D%95%E4%B8%AA%E7%BB%93%E6%9E%9C%E5%90%97%EF%BC%9F.png)
该echo
命令根据传递给它的表达式输出不同的结果。工作目录是/home/etc
$ echo .*/
/ ../ .cache/ .config/ .gnupg/ .local/ .mozilla/ .ssh/
$ echo ./*
./Desktop ./Documents ./Downloads ./Music ./Pictures ./Public ./snap ./Templates ./Videos
$ echo .*/*
.cache/event-sound-cache.tdb.d410907cf15246578458d0ad7919eb5e.x86_64-pc-linux-gnu .cache/evolution .cache/fontconfig .cache/gnome-screenshot .cache/gnome-software .cache/gstreamer-1.0 .cache/ibus .cache/ibus-table .cache/libgweather .cache/mesa_shader_cache .cache/mozilla .cache/thumbnails .cache/ubuntu-report .cache/update-manager-core .cache/wallpaper .config/dconf .config/enchant .config/eog .config/evolution .config/gedit .config/gnome-initial-setup-done .config/gnome-session .config/goa-1.0 .config/gtk-3.0 .config/ibus .config/nautilus .config/pulse .config/rclone .config/update-notifier .config/user-dirs.dirs .config/user-dirs.locale ./Desktop ./Documents ./Downloads .gnupg/private-keys-v1.d .gnupg/pubring.kbx .gnupg/trustdb.gpg .local/share .mozilla/extensions .mozilla/firefox .mozilla/systemextensionsdev ./Music ../ec ./Pictures ./Public ./snap ./Templates ./Videos
$ echo */*/
Downloads/sync/ Downloads/testdir/ snap/gnome-calculator/
目的是减少获取输出的命令数量。是否可以有一个单一的 echo 语句将echo .*/
和echo ./*
以外的输出结合起来echo .*/ */
?
答案1
假设您知道dot-files
(以点开头的文件)并且file-expansion
(列表文件又名通配符)与默认情况下的文件不匹配。
你可以得到一如果您这样做,请列出:
$ echo .*/ ./* .*/* */*/
如果这就是你想问的。
现在的问题变成了
除了 echo .*/ */ 之外,是否可以有一个单一的 echo 语句结合了 echo .*/ 和 echo ./* 的输出?
假设您的意思是在 pwd 中列出文件*
和点文件:( 可移植)答案是肯定的:.*
find * -maxdepth 1 -type d
仅限于bash:
shopt -s dotglob
echo */
答案2
这是由 shell 完成的。没有回声。
这可能更像是您正在尝试做的事情。
( shopt -s dotglob; echo * )
它列出了所有文件,但不列出.
和..
.
它在 bash 中工作。
答案3
echo 命令根据传递给它的表达式输出不同的结果。
这是一个根本性的误解。该echo
命令看不到任何表达式;它只是输出作为参数接收的字符串文字集。
shell 负责评估命令行,然后将第一个单词作为命令执行,所有后续单词作为参数传递。