Как обработать в скрипте Bash аргументы с пробелами? - PullRequest
0 голосов
/ 02 июля 2018

У меня есть скрипт 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

однако, когда есть пробелы, например ::100100

my_script foo "ba r"

скрипт не выполняется.

Есть ли простой способ обработки аргументов с пробелами?

1 Ответ

0 голосов
/ 02 июля 2018

"$@" - способ сделать это, но вы теряете преимущества, когда излишне назначаете его обычной переменной.

ag_search_and_replace search replace "$@"

Если вам необходимо создать новую именованную переменную, используйте массив.

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