이상한 문제가 있습니다...아치 설정을 구성하고 있는데 별칭 중 하나가 작동하지 않습니다...
alias es='echo $SCRIPTDEST/$1'
어떤 이유로 $SCRIPTDEST/와 $1 사이에 공백이 인쇄되어 모든 것이 손상됩니다. 어떻게 해결할 수 있나요?
또한 $SCRIPTDEST는 내 모든 스크립트의 위치일 뿐입니다.
또한 도움이 될 것으로 생각되는 관련 출력의 스크린샷은 다음과 같습니다. 다른 필요한 사항이 있으면 알려주시기 바랍니다.
일부 사용자에게 적합하지 않아 이미지가 제거되었습니다. 가벼운 공포 요소가 포함되어 있습니다. 텍스트로 대체해주세요.
답변1
이런 문제가 있어요Bash에서 언제 별칭을 사용하고, 언제 스크립트를 사용하고, 언제 함수를 작성합니까?많은 것을 설명합니다. 그러나 문제는 구체적으로 해결될 수 있습니다.
무엇보다도 Bash의 별칭이 별칭을 대체합니다.끈그리고 또 다른끈라인을 추가로 처리하기 전에. 논리가 없습니다. $1
특정 별칭이 하나도 없습니다 . 오직문자열 교체.
별칭 정의:
alias es='echo $SCRIPTDEST/$1'
이제 달리면
es foo
이전 공백을 포함하여 뒤에 오는 모든 내용은 유지 es
됩니다 . 결과는 다음과 같습니다echo $SCRIPTDEST/$1
foo
echo $SCRIPTDEST/$1 foo
그런 다음 추가로 평가하십시오. $1
이것이 쉘이 생각하는 것이며 별칭과는 아무런 관련이 없습니다. 설명을 보면 $1
빈 문자열로 확장되는 것 같습니다 . 변수가 참조되지 않습니다. 이는 또 다른 오류입니다.
당신의 아이디어가 별칭의 맥락이 foo
되는 것 같아요 . 그렇다면 " 와 사이의 공백 " $1
이라고 쓰면 실제로는 " 와 사이의 공백 "을 의미하는 것입니다. 이것이 바로 와 사이에 입력하는 공백 입니다 .$SCRIPTDEST/
$1
$SCRIPTDEST/$1
foo
es
foo
함수는 매개변수를 받아들이고 이를 호출합니다 $1
. $2
다음 함수는 별칭에서 원하는 작업을 수행합니다.
unalias es
es () {
printf '%s\n' "$SCRIPTDEST/$1"
}