这是迭代 $PATH 组件的正确方法吗?

这是迭代 $PATH 组件的正确方法吗?

由于各种原因,我想使用环境变量将多个文件路径传递给我的脚本。我想到了一个想法,即像 is 一样构造变量PATH,用冒号分隔条目。

经过一些研究之后,我想出了以下技术来迭代名称:

OLD_IFS=$IFS
IFS=":"
# using PATH to demonstrate
for ITEM in $PATH; do
    echo hacking $ITEM which comes from $PATH
done
IFS=$OLD_IFS

它看起来运行正常,但我有点担心:

  • 对我来说,操作IFS似乎相当尴尬和不雅,并且不可扩展(如果其他人已经在使用怎么办OLD_IFS?)。

  • 输出显示冒号PATH被空格替换——该值是否实际上以某种方式暂时改变,或者这只是一个显示怪癖?

  • 如果输入变量中有例如,这似乎不会进行通配符*;但它真的安全吗?我可能需要防范哪些其他威胁?

  • 然后是冒号的问题。虽然我理解/UNIX 目录或文件名中的任何字符在技术上都是合法的,但我也理解:不鼓励这样做,因为它无法逃脱出于 PATH 的目的。但是,我仍然觉得我更喜欢一个完全通用的解决方案。

我是不是错过了更好的选择?我是不是应该在 shell 脚本中忍受这些事情?我更习惯使用 Python 之类的应用程序开发语言,找不到更好的词来形容它,感觉更“常规”。

相关内容