linux – 如何在bash脚本中正确地将文件名传递给其他程序?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了linux – 如何在bash脚本中正确地将文件名传递给其他程序?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1432字,纯文字阅读大概需要3分钟。
内容图文
![linux – 如何在bash脚本中正确地将文件名传递给其他程序?](/upload/InfoBanner/zyjiaocheng/955/7d315eb6cb914a89b83a15336b80776c.jpg)
在正确处理文件名时,应该在Bash脚本(没有Perl,Python等等)中使用什么成语来为脚本的参数中的另一个程序构建命令行?
正确地说,我的意思是处理带有空格或奇数字符的文件名,而不会无意中导致其他程序将它们作为单独的参数处理(或者,在<或>的情况下 – 如果不正确的话,如果不正确的文件名字符则有效逃脱 – 做更糟糕的事情).
这是我的意思的一个组成例子,在一个不能正确处理文件名的形式中:让我们假设这个脚本(foo)为一个命令构建一个命令行(bar,假设在路径中) foo的输入参数和移动任何看起来像前面的标志,然后调用bar:
#!/bin/bash
# This is clearly wrong
FILES=
FLAGS=
for ARG in "$@"; do
echo "foo: Handling $ARG"
if [ x${ARG:0:1} = "x-" ]; then
# Looks like a flag, add it to the flags string
FLAGS="$FLAGS $ARG"
else
# Looks like a file, add it to the files string
FILES="$FILES $ARG"
fi
done
# Call bar with the flags and files (we don't care that they'll
# have an extra space or two)
CMD="bar $FLAGS $FILES"
echo "Issuing: $CMD"
$CMD
(请注意,这仅仅是一个示例;还有很多其他时间需要执行此操作以及一堆args然后将它们传递到其他程序.)
在一个简单文件名的天真场景中,效果很好.但是如果我们假设一个包含文件的目录
one two three and a half four < five
当然,命令foo *在其任务中失败了:
foo: Handling four < five foo: Handling one foo: Handling three and a half foo: Handling two Issuing: bar four < five one three and a half two
如果我们实际允许foo发出该命令,那么结果将不是我们所期望的.
以前我试过通过确保每个文件名周围都有引号的简单方法来解决这个问题,但我(非常)很快就知道这不是正确的方法.
内容总结
以上是互联网集市为您收集整理的linux – 如何在bash脚本中正确地将文件名传递给其他程序?全部内容,希望文章能够帮你解决linux – 如何在bash脚本中正确地将文件名传递给其他程序?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。