gpt4 book ai didi

bash - 遍历目录中的所有文件,或仅遍历 sh 中的指定文件

转载 作者:行者123 更新时间:2023-11-29 09:21:42 26 4
gpt4 key购买 nike

我有一个目录 config,其中包含以下文件列表:

$ ls config
file one
file two
file three

我想要一个 bash 脚本,当没有给定参数时,它会遍历所有这些文件;当给定文件名作为参数时,我希望它遍历命名文件。

#!/bin/sh
for file in ${@:-config/*}
do
echo "Processing '$file'"
done

如上所述,for 循环中的列表项周围没有引号,它在无参数情况下会产生预期的输出,但在您传递参数时会中断(它会在空格处拆分文件名。) term (for file in "${@:-config/*}") 在我传递文件名时有效,但如果不传递则无法扩展 glob。

有没有办法让这两种情况都起作用?

最佳答案

对于更简单的解决方案,只需修改您的 IFS 变量

#!/bin/bash
IFS=''
for file in ${@:-config/*}
do
echo "Processing '$file'"
done
IFS=$' \n\t'

$IFS 是一个默认的 shell 变量,它列出了 shell 使用的所有分隔符。如果您从此列表中删除空格,shell 将不再按空格拆分。您应该在运行后将其设置回默认值,这样它就不会导致其他函数稍后在您的脚本中运行不正常

注意:这似乎与破折号有关(我使用的是 debian,并且 #!/bin/sh 链接到破折号)。如果您使用空的 $IFS,传递的参数将仅作为 1 个文件返回。但是,如果您输入一些随机值(即 IFS=':'),行为将是您想要的(除非您的文件名中有 : )

尽管 #!/bin/bash 可以正常工作

关于bash - 遍历目录中的所有文件,或仅遍历 sh 中的指定文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23824621/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com