2015-10-16 47 views
0

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

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

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

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

+0

您是否尝试过你的报价$文件? ' “$文件”'?我想你应该先做。 – kenorb

+0

@kenorb它不起作用,我试过 –

+0

你可以在search_file函数的第几行粘贴你的问题,你如何解析参数? – kenorb

回答

0

使用"[email protected]"(引用)而不是未引用$*,并确保引用$file无论它在哪里使用。

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

稍微干净是使用shift删除从一组位置参数的第一个参数,这样就可以简单地遍历"[email protected]"不使用子扩展操作。

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

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

+0

谢谢。我选择这个答案是因为它改变了我的脚本,而不是你应该使用它的方式。 –

0

运行如下脚本(放在单引号*),这应该解决您的问题,如果文件有空间或不打印chracters使用“$文件”它的名字

./my_script book '*' 

低于$更好文件

+0

我看,如果我有一个文件“书架2”,它正在寻找“书架”文件和“2”文件。它的工作原理就像你说的,只是当我把“$ file”也写上,谢谢。 –