는 방법을 사용하여 환경변수 안에 인용된 문자열에 Bash
-
20-08-2019 - |
문제
도했는 다양한 형태의에서는 다음을 강타 스크립트:
#!/bin/bash
svn diff $@ --diff-cmd /usr/bin/diff -x "-y -w -p -W $COLUMNS"
그러나 나는 얻을 수 없습니다 이 구문을 정확하게 확대 COLUMNS
환경 변수입니다.
도했는 다양한 형태의 다음과 같다:
svn diff $@ --diff-cmd /usr/bin/diff -x '-y -w -p -W $COLUMNS'
고
svn diff $@ --diff-cmd /usr/bin/diff -x '-y -w -p -W ${COLUMNS}'
고
eval svn diff $@ --diff-cmd /usr/bin/diff -x "-y -w -p -W $COLUMNS"
제안이 있습니까?
해결책
확실하지 않은 경우 터미널에서 'Cols'요청을 사용하고 열을 잊어 버릴 수 있습니다.
COLS=$(tput cols)
다른 팁
그냥 빠른 메모/요약하는 사람이 여기에 왔을 통해 구글에 대한 답을 찾고있는 일반적인 질문에 제목(나)이었다.다음과 같은 작동에 대한 액세스 권한을 얻을 쉘 변수는 따옴표 안의:
echo "$VARIABLE"
echo "${VARIABLE}"
용의 단일 지수는 주요 문제입니다.에 따라 Bash 참조 설명서:
바깥쪽의 문자에서 따옴표(
'
)의 글자 그대로의 의미를 보존 각 문자에서 따옴표입니다.하나의 견적서 발생하지 않을 수 있습니다 간에 단일 지수,심지어 경우 백슬래쉬를 앞에.[...] 바깥쪽의 문자에서 따옴표("
)의 글자 그대로의 의미를 보존한 모든 문자에서 따옴표를 제외하고,$
,`
,\
, 고,역사의 확장 사용!
.캐릭터$
과`특별한 의미를 유지에 쌍따옴표(참조하십시오 쉘 확장).백슬래쉬는 특별한 의미를 경우에만 따라 다음 중 하나에 의해 문자:$
,`
,"
,\
, 또는 줄 바꿈.에 백슬래쉬 뒤에 있으로 이러한 문자의 하나이 제거됩니다.백슬래쉬가 이전 문자없이 특별한 의미를 수정되지 않고 남아있습니다.더블 견적을 인용 수 있습니다 내에서 쌍따옴표로 앞에 백슬래시입니다.사용 가능한 경우,역사,확장 될 것입니다 수행지!
에 나오는 따옴표는 이스케이프를 사용하여 백슬래시입니다.백슬래시 이전!
가 제거되지 않습니다.특별한 매개변수*
고@
특별한 의미를 담고 있는 경우 큰 따옴표(참조하십시오 매개변수 확장).
에서 특정한 경우에 묻는 질문,$열 특별한 변수가 있는 비표준 특성(볼 lhunath 의 대답이 있습니다.)
주목하십시오 COLUMNS
이다:
- 아니다 환경 변수. Bash 자체에 의해 설정된 일반적인 bash 매개 변수입니다.
- a를 수신하면 자동으로 설정합니다
SIGWINCH
신호.
두 번째 요점은 일반적으로 당신을 의미합니다 COLUMNS
변수는 귀하에게만 설정됩니다 인터렉티브 껍데기, ~ 아니다 배쉬 스크립트에서.
스크립트 인 경우 stdin
터미널에 연결되면 터미널에게 물어 보면서 터미널의 너비를 수동으로 조회 할 수 있습니다.
tput cols
SVN 명령에서 이것을 사용하려면 :
svn diff "$@" --diff-cmd /usr/bin/diff -x "-y -w -p -W $(tput cols)"
(참고 : 당신은해야합니다 인용하다 "$@"
그리고 멀리 떨어져 있습니다 eval
;-))
다음 스크립트는 여러 값에 대해 저에게 작동합니다. $COLUMNS
. 당신이 설정하지 않는지 궁금합니다 COLUMNS
이 전화 전에?
#!/bin/bash
COLUMNS=30
svn diff $@ --diff-cmd /usr/bin/diff -x "-y -w -p -W $COLUMNS"
당신은 에코 할 수 있습니까? $COLUMNS
스크립트 내부에서 올바르게 설정되었는지 확인하십시오.
당신은 제대로하고 있습니다. 그래서 나는 다른 것이 잘못되었다고 생각합니다 (열이 아님?).
이러한 사례를 디버깅하는 요령은 전문 명령 (프로그래밍 언어를위한 폐쇄)을 만드는 것입니다. Diff-Columns라는 이름의 쉘 스크립트를 작성하십시오.
exec /usr/bin/diff -x -y -w -p -W "$COLUMNS" "$@"
그리고 그냥 사용하십시오
svn diff "$@" --diff-cmd diff-columns
이렇게하면 코드가 더 깨끗하고 더 모듈 식 (하향식 접근법)이며 Diff-Column 코드를 별도로 테스트 할 수 있습니다 (상향식 접근).