Bash,循环目录
发布时间:2020-12-16 01:23:28 所属栏目:安全 来源:网络整理
导读:我有一个关于bash如何工作的根本问题,以及一个相关的实际问题. 基本问题:假设我在一个目录中有三个子目录:a,b和c. 母鸡代码 for dir in $(ls)do echo $dirdone 吐出来 a b ca b ca b c 即dir始终存储我的cwd中的所有文件/目录的列表.我的问题是:为什么在
我有一个关于bash如何工作的根本问题,以及一个相关的实际问题.
基本问题:假设我在一个目录中有三个子目录:a,b和c. 母鸡代码 for dir in $(ls) do echo $dir done 吐出来 a b c a b c a b c 即dir始终存储我的cwd中的所有文件/目录的列表.我的问题是:为什么在世界上这样会很方便?在我看来,dir存储每个元素一次是更有用和直观的,也就是说我想要输出 a b c 另外,根据一个答案 – 在$(ls)中使用dir是错误的,但是当我在$(ls -l)中使用dir时,我会获得更多的abc副本(比目录/文件更多在cwd).这是为什么? 我的第二个问题是实用的:我如何循环我的cwd中以资本W开头的所有目录(而不是文件!)?我开始 for dir in `ls -l W*` 但是这是因为a)问题1和b)的原因,因为它不排除文件.建议赞赏
从来没有解析过这样的输出(
Why you shouldn’t parse the output of ls(1)).
此外,您的语法错误.你不是(),你的意思是$(). 就是说,要循环使用W开头的目录(或者使用find命令,取决于你的方案): for path in /my/path/W*; do [ -d "${path}" ] || continue # if not a directory,skip dirname="$(basename "${path}")" do_stuff done 至于从恶魔ls循环得到的输出,它不应该是这样的.这是预期的输出,并演示为什么你不想使用ls在第一个地方: $find . ./c ./a ./foo bar ./b $type ls ls is hashed (/bin/ls) $for x in $(ls); do echo "${x}"; done a b c foo bar (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |