다음 git + sed 함수에 정확히 일치 플래그를 어떻게 추가할 수 있나요?

다음 git + sed 함수에 정확히 일치 플래그를 어떻게 추가할 수 있나요?

를 무시하면서 sed 찾기 및 바꾸기를 수행할 수 있는 bash 기능을 만들고 싶습니다 .gitignore. 또한 명령에 git grep 플래그를 추가할 수 있기를 원합니다. 예를 들어, 정확한 일치를 위해서는 -w.

이것이 내가 지금까지 가지고 있는 것입니다:

gs {
  local grep_options=()
  local search_pattern
  local replacement

  while [[ $1 =~ ^- ]]; do
    grep_options+=("$1")
    shift
  done

  search_pattern=$1
  replacement=$2

  git grep -l "${grep_options[@]}" "$search_pattern" | xargs sed -i "s/$search_pattern/$replacement/g"
}

gs pattern replacement검색 및 바꾸기가 성공합니다. 그러나 gs -w pattern replacement아무 일도 일어나지 않을 것입니다.

왜 그런 겁니까? 어떻게 해결하나요?

답변1

함수 선언에 구문 오류가 있습니다.

바꾸다

w { ... }

다음을 수행해야 합니다.

w() { ... }

항상 스크립트를 다음으로 전달하세요.https://shellcheck.net도움을 요청하기 전에:

$ shellcheck file

In file line 1:
gs {
^-- SC2148 (error): Tips depend on target shell and yours is unknown. Add a shebang or a 'shell' directive.
   ^-- SC1083 (warning): This { is literal. Check expression (missing ;/\n?) or quote it.


In file line 2:
  local grep_options=()
  ^---^ SC2168 (error): 'local' is only valid in functions.


In file line 3:
  local search_pattern
  ^---^ SC2168 (error): 'local' is only valid in functions.


In file line 4:
  local replacement
  ^---^ SC2168 (error): 'local' is only valid in functions.


In file line 15:
}
^-- SC1089 (error): Parsing stopped here. Is this keyword correctly matched up?

For more information:
  https://www.shellcheck.net/wiki/SC2148 -- Tips depend on target shell and y...
  https://www.shellcheck.net/wiki/SC2168 -- 'local' is only valid in functions.
  https://www.shellcheck.net/wiki/SC1083 -- This { is literal. Check expressi...

관련 정보