繁体   English   中英

处理bash脚本参数中的空格

[英]Handle whitespaces in arguments to a bash script

我在处理bash脚本中包含空格的参数时遇到问题。

剧本

#!/bin/bash
for i in $*
do
    echo "$i"
done

调用(带有2个参数)

$ ./script.sh "a b" "c"

实际输出(好像有3个参数)

a
b
c

预期的输出(好像有两个参数)

a b
c

有人可以解释如何获得预期的输出吗?

在第一行将$*更改$* "$@"

回复2011年有关如何将每个参数分配给变量的评论...

该bash函数将每个参数分配给数组中的项目。 这些可以在其他地方使用。

有问题的函数查找某种类型的文件,然后抓取它们:

search "multi word search terms" txt

相关的行是前5行。我们初始化一个数组,遍历传递的参数,并将它们分配为数组中的项。 然后,函数将根据需要引用它们。

这样,您可以指定一个可选的第3个参数,以在您选择的编辑器中打开文件:

search "multi word search terms" txt mate

变量$ searchterm已转义了空格,以便grep将其接受为一个字符串。

function search() {
        terms=();
        for i in "$@"
        do
                terms+=("$i")
        done

        file='*.'${terms[1]};
        searchterm=${terms[0]// /\\ };

        if [ -n "$3" ]; then
                find . -type f -name $file -exec grep -irl "$searchterm" {} \; | xargs ${terms[2]};
        else
                find . -type f -name $file -exec grep -irl "$searchterm" {} \;;
        fi
}

希望这对某人有帮助!

您想要的是$ @作为参数(并且必须将其括在“”中)而不是$ *。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM