
나는 이것을 가지고있다:
function abash {
if [[ -v $1 ]]
then
atom ~/Shell/$1.sh
else
atom ~/.bashrc
fi
}
Atom을 사용하여 bash 스크립트를 더 쉽게 편집할 수 있도록 내 파일에서 입력이 존재하는지 확인해야 하지만 유효한 입력을 제공했는데도 존재하지 않는 것 같다는 ~/.bashrc
것이 문제입니다 (예: 파일이 있는 곳에서 실행). 편집하고 싶습니다)이 abash로 열립니다 . 이 문제를 어떻게 해결할 수 있나요? 테스트에 대한 아이디어는 어디서 얻었나요 ?[[ -v $1 ]]
$1
abash 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
}
정답은이와 유사:
그러나 그것이 작동하도록 하기 위해 내가 포함시킨 내용을 기억해 두십시오 .