处理bash脚本参数中的空格

时间:2011-04-06 09:51:06

标签: bash arguments whitespace

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

脚本

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

电话(带2个参数)

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

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

a
b
c

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

a b
c

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

3 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:0)

你想要的是参数的$ @(你必须把它括在“”中)而不是$ *。

答案 2 :(得分:0)

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

此bash函数将每个参数分配给数组中的项。然后可以在其他地方使用它们。

有问题的函数找到某种类型的文件,然后将它们打印出来:

search "multi word search terms" txt

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

通过这种方式,您可以指定一个可选的第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
}

希望这有助于某人!