处理文件名中带有空格的文件列表

处理文件名中带有空格的文件列表

我正在尝试开发一个 bash 脚本,该脚本处理可能包含空间名称的文件列表。

(我已经咨询过文件名中存在空格的脚本出现问题为什么我无法在 bash 脚本中转义空格?,但似乎无法完善我的脚本。)

这是我的脚本。实际的过程比较复杂,我在这里简化为简单的file命令。

#!/bin/bash

if [ $# -eq 0 ]; then
   echo "Usage is $0 <files to be tested>"
   exit
fi

allfilestobetesed=$@
for filetobetested in "$allfilestobetested"
do
    file "$filetobetested"
done

如何改进我的脚本?

答案1

allfilestobetested如果可以的话,您可能应该删除变量:

for filetobetested in "$@"; do
    file "$filetobetested"
done

将正确扩展

答案2

你们非常接近。首先,你正确地使用了 $@ 而不是 $*。

您需要担心 shell 扩展,因此不要"像作业中那样使用不必要的扩展。这将消除令牌之间的界限。然而你需要它围绕“@_”。

所以我们有:

if [ $# -eq 0 ]; then
   echo "Usage is $0 <files to be tested>"
   exit
fi

for filetobetested in "$@"
do
    file "$filetobetested"
done

最后,我的 bash 调试器http://bashdb.sf.net可以帮助你关注这样的事情。bashdb 手册第 1.2 节描述如何设置 PS4 以从set -x跟踪中提供更多信息。

答案3

你不需要"$@"

    for filetobetested
    do
        file "$filetobetested"
    done

相关内容