搜索名称中包含空格的文件

时间:2015-10-16 16:10:26

标签: bash

这是一个脚本,它在第一个参数中获取要搜索的单词,然后在该单词中搜索要搜索的文件列表。 例如,我如何运行它:./my_script book *

for file in ${*:2}; do
    if [[ -f "$file" ]]; then
        search_file "$1" $file
    fi

(search_file)是上面定义的函数。 问题是它会跳过名称中包含空格的文件。我想这是因为${*:2},所以我应该在那里写什么?

顺便说一下 - 我应该在第三行写$file还是"$file"

2 个答案:

答案 0 :(得分:0)

运行你的脚本如下(将*放在单引号中),如果文件名中有空格或不可打印的字符,这可以解决你的问题

./my_script book '*'

使用“$ file”优于$ file

答案 1 :(得分:0)

使用"$@"(引用)代替不带引号的$*,并确保在$file引用它的任何地方引用。

for file in "${@:2}"; do
    if [[ -f "$file" ]]; then
        search_file "$1" "$file"
    fi

稍微更清楚的是使用shift从位置参数集中删除第一个参数,这样您就可以简单地迭代"$@"而不使用子字符串扩展运算符。

first=$1
shift
for file in "$@"; do
    if [[ -f "$file" ]]; do
        search_file "$first" "$file"
    fi

(事实上,您可以将for循环缩短为for file; do,因为迭代位置参数是默认操作,没有in列表。)