如何在脚本中处理带空格的Bash参数?

时间:2018-07-02 12:56:23

标签: bash shell arguments escaping quoting

我有一个Bash脚本(以简化形式)可以执行以下操作:

#!/bin/bash

function ag_search_and_replace {
  ag -l "$1" "${@:3}" | xargs -r perl -i -pe "s/$1/$2/g"
}

locations="$@"

ag_search_and_replace search replace $locations

当参数没有空格时,这可以按预期工作,例如:

my_script foo bar

但是,如果有空格,例如:

my_script foo "ba r"

脚本失败。

是否有一种简单的方法来处理带空格的参数?

1 个答案:

答案 0 :(得分:4)

"$@"是做到这一点的方法,但是如果不必要地将其分配给常规变量,则会失去好处。

ag_search_and_replace search replace "$@"

如果必须创建一个新的命名变量,请使用数组。

locations=( "$@" )
ag_search_and_replace search replace "${locations[@]}"