~/.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
.
껍데기
나는 bash
Debian 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입니다.