bash에서 목록을 에코하면 '/'가 제거됩니다.

dx_over_dt

이전 브랜치를 선택하고 확인하는 편리한 bash 함수발견 했습니다 . 그것은 매력처럼 작동했습니다. 핵심 비트는 다음과 같습니다.

  BRANCHES=(
    $(
      git reflog |
        egrep -io "moving from ([^[:space:]]+)" |
        awk '{ print $3 }' |        # extract 3rd column
        awk ' !x[$0]++' |           # Removes duplicates.  See http://stackoverflow.com/questions/11532157
        egrep -v '^[a-f0-9]{40}$' | # remove hash results
        while read line; do         # verify existence
          ([[ $CHECK_EXISTENCE = '0' ]] || git rev-parse --verify "$line" &>/dev/null) && echo "$line"
        done |
        head -n "$NUM"
    )
  )

  if [[ $INTERACTIVE = '1' ]]; then
    PS3="Choose a branch: "

    select d in "${BRANCHES[@]}"; do
      test -n "$d" && break
      echo ">>> Invalid Selection"
    done

    git checkout "$d"
  else
    printf '%s\n' "${BRANCHES[@]}"
  fi

브랜치 이름은 모두 bug/...또는 task/....

어떤 이유로 오늘은 실패하기 시작했습니다. 내가 그것을 함께 디버깅 할 때 set -x, 나는 것을 발견 echo ${BRANCHES[@]}하는 select을 제거하고, 인용 부호로 둘러싸이지 않은 평가가 나타납니다 /.

문제를 단순화 / 확인하기 위해 다음을 실행했습니다.

foo=( "a/b" "c/d" )
echo $foo
# prints a b
echo ${foo[@]}
# prints a b c d
echo "${foo[@]}"
# prints a/b c/d

이 문제는 예상대로 내 별칭 / 기능 전체에 혼란을 일으키고 있습니다.

이상하게도 스크립트의 함수는 다음을 인쇄합니다.

1) master
task
2) 16658-...
task
3) 16525-...
Choose a branch:

foo예상대로 인쇄 에서 선택 :

select f in "${foo[@]}"; do
  echo $f
  break
done
# prompts:
# 1) a/b
# 2) c/d

근본 원인에 대해서는 틀렸을 수도 있지만 의심 스럽습니다. 1위의 프롬프트에서 선택하면 에코가 발생 a b합니다.

사실로...

foo=a/b
echo $foo
# prints a b
echo "$foo"
# prints a/b

foo="a/b"
echo $foo
# prints a/b

중요하다면 Windows 용 git-bash를 유닉스 bash 대신 사용하고 있지만 그게 문제라고 생각할 수 없습니다.

어떤 아이디어?

인용되지 않은 것을 에코하면 split + glob으로 알려진 것이 적용됩니다. 이것은 당신이 에코하는 것은 변수의 모든 문자로 분할되고 IFSglob으로 처리되고 일치하는 경우 해당 glob이 확장된다는 것을 의미합니다. 여기서 신경 쓰는 부분은 분할입니다. 설명하는 것은 기본값 IFS(공백, 탭 및 줄 바꿈)으로는 발생할 수 없습니다 . 이 동작이 보이면 사용자 (또는 셸 세션에있는 항목)가 IFS다른 것으로 설정 한 것 /입니다. 설명하기 위해 :

$ foo=( "a/b" "c/d" )
$ echo ${foo[@]}
a/b c/d

## Now, change IFS
$ IFS='/'
$ echo ${foo[@]}
a b c d
## Of course, properly quoting fixes it
$ echo "${foo[@]}"
a/b c/d

## And so does un-setting IFS
$ unset IFS
$ echo ${foo[@]}
a/b c/d

이것은 항상 변수를 인용해야하는 이유 중 하나 일뿐입니다. 이에 대한 자세한 내용 은 bash / POSIX 셸에서 변수를 인용하는 것을 잊은 보안 의미셸 스크립트가 공백이나 기타 특수 문자로 인해 질식하는 이유 를 참조하십시오 . .

이것은 원본 스크립트가 실패한 이유가 아니라 예제가 실패한 이유를 설명합니다. 원본에는 내가 말할 수있는 한 모든 것이 적절하게 인용되어 있습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

복사 된 목록에서 항목을 제거하면 원본에서도 제거됩니다.

분류에서Dev

목록에서 항목을 제거하면 목록의 나머지 항목이 엉망이됩니다.

분류에서Dev

목록보기에서 다중 선택을 종료하면 목록 항목 패딩이 제거됩니다.

분류에서Dev

목록에서 항목을 삭제하고 setState (() {})를 수행하면 색상 상태가 변경됩니다.

분류에서Dev

`select`에서`option`의 상위 항목을 변경하면 이벤트가 제거됩니다.

분류에서Dev

텍스트에서 문장 목록을 제거하려고하면 첫 번째 문자 만 제거됩니다.

분류에서Dev

데이터 프레임 목록에 함수를 적용하면 데이터가 제거됩니다.

분류에서Dev

두 목록을 반복하고 결과 목록에 추가하면 빈 목록이 반환됩니다. 왜?

분류에서Dev

디스크에서 NSMutableArray로 파일을로드하면 메모리에서 NSMutableArray가 제거됩니다.

분류에서Dev

하나의 링크를 제거하면 연결된 목록에서 노드가 어떻게 삭제됩니까?

분류에서Dev

데이터 목록에서 항목을 두 번 이상 추가 / 제거하는 데 문제가 있습니다.

분류에서Dev

목록에 요소를 추가하면 이전 요소가 삭제됩니다.

분류에서Dev

목록에 튜플을 추가하려고하면 '문자가 추가되어 코드가 깨집니다.

분류에서Dev

Windows CMD FOR 루프에서 youtube-dl을 사용하면 ASCII가 아닌 문자가 제거됩니다.

분류에서Dev

Highcharts : 그래프에 선을 추가하면 X 축에서 레이블이 제거됩니다.

분류에서Dev

어떻게 목록에없는됩니다 팬더 dataframe에서 특정 값을 제거하려면?

분류에서Dev

chrome-extension-popup의 정렬되지 않은 목록에서 하나의 항목을 제거하면 그 뒤에 오는 항목도 제거됩니다.

분류에서Dev

htaccess에서 PHP 확장을 제거하면 내부 서버 오류 (500)가 반환됩니다.

분류에서Dev

목록에서 항목을 추가하고 제거하는 QCheckbox

분류에서Dev

Vue.js : 새 항목을 추가 한 후 목록에서 항목을 제거하면 버그가 발생했습니다.

분류에서Dev

내 Python 프로그램 목록에서 중복 항목을 제거하는 데 문제가 있습니다.

분류에서Dev

Python Pandas에서이 Word DataFrame을 Zero One Matrix Format DataFrame으로 변환하면 ""가 제거됩니다.

분류에서Dev

C # 문자열 목록을 콤보 상자에 추가하고 항목이 제거되면 목록에 자동 영향을줍니다.

분류에서Dev

목록에서 항목을 제거하고 다시 추가 할 때 목록에서 위치 유지

분류에서Dev

객체 목록에서 클래스 이름을 변경하면 목록에서 itens가 제거되는 이유

분류에서Dev

Python : 내부 목록에서 목록을 제거하면 다음 결과가 발생합니다. IndexError : list index out of range

분류에서Dev

jQuery로 목록에서 항목을 추가하고 제거하는 데 도움이 필요합니다.

분류에서Dev

목록에서 항목을 제거하면 동일한 클래스의 다른 목록이 반영됩니다. 왜?

분류에서Dev

다른 양식의 목록에서 항목을 추가 / 제거하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    복사 된 목록에서 항목을 제거하면 원본에서도 제거됩니다.

  2. 2

    목록에서 항목을 제거하면 목록의 나머지 항목이 엉망이됩니다.

  3. 3

    목록보기에서 다중 선택을 종료하면 목록 항목 패딩이 제거됩니다.

  4. 4

    목록에서 항목을 삭제하고 setState (() {})를 수행하면 색상 상태가 변경됩니다.

  5. 5

    `select`에서`option`의 상위 항목을 변경하면 이벤트가 제거됩니다.

  6. 6

    텍스트에서 문장 목록을 제거하려고하면 첫 번째 문자 만 제거됩니다.

  7. 7

    데이터 프레임 목록에 함수를 적용하면 데이터가 제거됩니다.

  8. 8

    두 목록을 반복하고 결과 목록에 추가하면 빈 목록이 반환됩니다. 왜?

  9. 9

    디스크에서 NSMutableArray로 파일을로드하면 메모리에서 NSMutableArray가 제거됩니다.

  10. 10

    하나의 링크를 제거하면 연결된 목록에서 노드가 어떻게 삭제됩니까?

  11. 11

    데이터 목록에서 항목을 두 번 이상 추가 / 제거하는 데 문제가 있습니다.

  12. 12

    목록에 요소를 추가하면 이전 요소가 삭제됩니다.

  13. 13

    목록에 튜플을 추가하려고하면 '문자가 추가되어 코드가 깨집니다.

  14. 14

    Windows CMD FOR 루프에서 youtube-dl을 사용하면 ASCII가 아닌 문자가 제거됩니다.

  15. 15

    Highcharts : 그래프에 선을 추가하면 X 축에서 레이블이 제거됩니다.

  16. 16

    어떻게 목록에없는됩니다 팬더 dataframe에서 특정 값을 제거하려면?

  17. 17

    chrome-extension-popup의 정렬되지 않은 목록에서 하나의 항목을 제거하면 그 뒤에 오는 항목도 제거됩니다.

  18. 18

    htaccess에서 PHP 확장을 제거하면 내부 서버 오류 (500)가 반환됩니다.

  19. 19

    목록에서 항목을 추가하고 제거하는 QCheckbox

  20. 20

    Vue.js : 새 항목을 추가 한 후 목록에서 항목을 제거하면 버그가 발생했습니다.

  21. 21

    내 Python 프로그램 목록에서 중복 항목을 제거하는 데 문제가 있습니다.

  22. 22

    Python Pandas에서이 Word DataFrame을 Zero One Matrix Format DataFrame으로 변환하면 ""가 제거됩니다.

  23. 23

    C # 문자열 목록을 콤보 상자에 추가하고 항목이 제거되면 목록에 자동 영향을줍니다.

  24. 24

    목록에서 항목을 제거하고 다시 추가 할 때 목록에서 위치 유지

  25. 25

    객체 목록에서 클래스 이름을 변경하면 목록에서 itens가 제거되는 이유

  26. 26

    Python : 내부 목록에서 목록을 제거하면 다음 결과가 발생합니다. IndexError : list index out of range

  27. 27

    jQuery로 목록에서 항목을 추가하고 제거하는 데 도움이 필요합니다.

  28. 28

    목록에서 항목을 제거하면 동일한 클래스의 다른 목록이 반영됩니다. 왜?

  29. 29

    다른 양식의 목록에서 항목을 추가 / 제거하는 방법은 무엇입니까?

뜨겁다태그

보관