~/.bash_aliases에 있는 내 별칭에 내가 뭘 잘못하고 있는 걸까요? [복사]

~/.bash_aliases에 있는 내 별칭에 내가 뭘 잘못하고 있는 걸까요? [복사]

~/.bashrc

광산에는 ~/.bashrc다음이 포함되어 있습니다 (기본적으로):

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

~/.bash_aliases

광산에는 ~/.bash_aliases다음이 포함되어 있습니다 (내 정의):

alias define="curl dict://dict.org/d:$1"

예상하다

거기에 별칭이 있으므로 define쉘(터미널)에서 직접 다음과 같은 것을 사용할 수 있습니다.

define internet

dict.org를 보고 인터넷에서 정의를 찾아서 나에게 보여주고 싶습니다.

어떤 이유에서인지 이 작업을 실행할 때마다나는 다음을 얻습니다(paste.debian.net에 호스팅되어 있으며 시간이 지나면 사라질 수 있습니다).


~/.bash_aliases나는 회의에서 출처를 찾으려고 노력합니다 bash.


껍데기

나는 bashDebian Bullseye에서 버전 5.0.11을 실행하고 있습니다(현재 테스트 중이며 곧 주요 릴리스가 예정되어 있습니다).


내 별칭에 내가 뭘 잘못하고 있는 걸까요 ~/.bash_aliases?

답변1

문제는 별칭이 스크립트나 함수와 같은 위치 매개변수를 취하지 않는다는 것입니다. 또한 bashrc의 별칭은 큰따옴표로 묶여 있으므로 매개 변수가 즉시 확장됩니다(비워집니다). 따라서 별칭은 기본적으로 다음과 같이 설정됩니다.

alias define="curl dict://dict.org/d:"

작은따옴표를 사용하여 매개변수를 올바르게 이스케이프하더라도 \생각한 대로 매개변수가 전달되지 않는 것입니다.

define foo예를 들어 curl dict://dict.org/d: foo, 이 방법을 사용하려면 set을 사용하여 매개변수를 쉘 매개변수로 설정해야 합니다.

set -- foo; define

그러나 인수/옵션이 필요한 경우에는 확실히 함수를 사용하는 것이 좋습니다.

define () {
    local word=$1
    curl "dict://dict.org/d:$word"
}

답변2

별칭이 작동하는 방식은 그렇지 않습니다.

이 기능은 비교적 강력하며 다음과 같이 사용할 수 있습니다.

function define(){
  curl "dict://dict.org/d:$1"
}

$1은 스크립트 또는 함수의 매개변수 1입니다.

관련 정보