Bash에서 변수가 함수에 전달되었는지 확인하는 방법은 무엇입니까?

Bash에서 변수가 함수에 전달되었는지 확인하는 방법은 무엇입니까?

나는 이것을 가지고있다:

function abash {
    if [[ -v $1 ]]
        then
            atom ~/Shell/$1.sh
        else
            atom ~/.bashrc
    fi
}

Atom을 사용하여 bash 스크립트를 더 쉽게 편집할 수 있도록 내 파일에서 입력이 존재하는지 확인해야 하지만 유효한 입력을 제공했는데도 존재하지 않는 것 같다는 ~/.bashrc것이 문제입니다 (예: 파일이 있는 곳에서 실행). 편집하고 싶습니다)이 abash로 열립니다 . 이 문제를 어떻게 해결할 수 있나요? 테스트에 대한 아이디어는 어디서 얻었나요 ?[[ -v $1 ]]$1abash cd~/Shell/cd.sh~/.bashrc[[ -v $1]]이것답변.

답변1

왜 실패하는지 잘 모르겠지만 (적어도) 두 가지 다른 가능한 옵션이 있습니다. [[ -v $1 ]]대신 다음 옵션 중 하나를 사용할 수 있습니다.

매개변수 개수가 0보다 큰지 확인하세요.

[[ $# > 0 ]]

첫 번째 매개변수가 비어 있지 않은지 확인하세요.

[[ $1 != '' ]]

답변2

bash조건식 -v var확인쉘 변수네이밍이 var설정되었습니다.

사용하게 되면 실제로 [[ -v $1 ]]내용에 따라 명명된 변수가 설정되어 있는지 확인하게 됩니다. $1귀하의 경우에는 $cd설정되지 않았음을 의미합니다.

$1다음을 사용하여 비어 있지 않은 문자열인지 간단히 확인할 수 있습니다 -n.

function abash {
    if [[ -n "$1" ]]
        then
            atom ~/Shell/"$1.sh"
        else
            atom ~/.bashrc
    fi
}

var꼭 있어야 한다는 점 참고해주세요쉘 변수작업 -v var. 다음과 같이 표현되므로 [[ -v 1 ]]절대 작동하지 않습니다.1위치 매개변수.

답변3

시험에 필요한 것은이름var, 태그 이름을 사용하세요. 변수 a를 테스트하려면 다음을 수행하십시오.아니요`[[ -v $a ]]를 실행하면 다음이 수행됩니다.

[[ -v a ]]

-v그러나 기본적으로 위치 매개변수에는 이름이 없기 때문에 위치 매개변수를 테스트할 방법이 없습니다 . 또는 원하는 경우 숫자이며 테스트는 숫자에 적용되지 않습니다.

-v따라서 다음 명령을 사용하지 않고 var를 직접 테스트해야 합니다 .

[[ ${1:+present} ]]

반품:

var 확장명을 인용해야 합니다.
나는 물결표 대신 $HOME을 사용하는 것을 선호합니다. 인용된 문자열을 허용합니다.

abash() {
    if [[ ${1:+present} ]]
        then
            atom "$HOME/Shell/$1.sh"
        else
            atom "$HOME/.bashrc"
    fi
}

정답은이와 유사:그러나 그것이 작동하도록 하기 위해 내가 포함시킨 내용을 기억해 두십시오 .

관련 정보