【问题标题】:Prevent globbing in a bash script防止在 bash 脚本中出现通配符
【发布时间】:2015-05-04 05:24:33
【问题描述】:

我正在尝试编写一个对选定文件进行操作的脚本。

#!/bin/bash
#ytest
lastArgNo=$#
sPattern=${!lastArgNo}
echo "operating on $sPattern"
#do operation on $sPattern
for sFile in $sPattern do
    #do something with each file
done

如果我开始这个脚本 参数 *.JPG 我得到

operating on IMG_1282.JPG

这是为模式 *.JPG 找到的最后一个文件,并且只有这个文件正在被处理。我需要命令行上给出的实际文件模式。提前致谢。

【问题讨论】:

  • 在运行脚本之前将参数引用到脚本或运行set -f 以完全禁用路径名扩展(但在这种情况下请记住在脚本中将其重新打开)。
  • 这不是重复的,因为我无法在脚本中设置 -o noglob。并且用引号转义并不能解决问题。

标签: bash file parameters glob


【解决方案1】:

您无法获得实际的模式:shell 在启动脚本之前已经扩展了它。您确实将实际文件作为参数,因此您应该做的是遍历所有参数:

#!/bin/bash
echo "operating on $# files"
for file; do
    # do something with each "$file"
done

您正在做的是将 lastArgNo 设置为 args 的数量,使用间接变量扩展将 sPattern 设置为最后一个参数的值。如果你这样做了arg=1; sPattern=${!arg},你会将 sPattern 设置为第一个参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-29
    • 1970-01-01
    • 2021-06-01
    • 2013-11-14
    相关资源
    最近更新 更多