我有一个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"
脚本失败。
是否有一种简单的方法来处理带空格的参数?
答案 0 :(得分:4)
"$@"
是做到这一点的方法,但是如果不必要地将其分配给常规变量,则会失去好处。
ag_search_and_replace search replace "$@"
如果必须创建一个新的命名变量,请使用数组。
locations=( "$@" )
ag_search_and_replace search replace "${locations[@]}"