group 명령 및 here-string을 사용하여 별명 제한 사항 해결
별명은 인수를 취할 수 없지만 "시뮬레이션"할 수 있습니다. 이 질문에 대한 나의 대답의 예를 들어 보자 .
alias mkcd='{ IFS= read -r d && mkdir "$d" && cd "$d"; } <<<'
여기서 일어나고있는 요점 :
read
내장 변수를 사용 하여 문자열을 변수로 읽습니다 d
. 빈 문자 (줄 바꿈, 탭, 공백)를 포함하여 전체 문자열을 읽으려면 IFS=
백 슬래시 이스케이프를 사용 하여 사용하지 않도록 설정 -r
합니다.
<<<
어떤은 여기 문자열 연산자는 우리가에 인수로 제공 어떤 문자열 리디렉션 할 수 있습니다 mkcd
별칭; 사용법은mkcd "some directory"
- 별명 내의 여러 명령은
{ list; }
구조를 사용하여 현재 쉘에서 결합되어 실행됩니다 ( 매뉴얼 group command
에서 알려진 bash
). 선행 공백 {
및 ;
개별 명령 목록이 필요합니다.
구체적인 예에서 우리는 다음을 수행 할 수 있습니다.
alias d='{ IFS= read -r n; dmesg | grep -iw "usb" | tail -n ${n:-5};} <<<'
공백으로 분리 된 인수를 저장하기 위해 단어 분할을 사용할 수도 있습니다.
bash-4.3$ { read -r a1 a2; echo "$a1"; echo "$a2";} <<< "arg1 arg2"
arg1
arg2
또는 배열을 사용하여 여러 인수를 제공 할 수 있습니다.
bash-4.3$ { read -a arr; echo "${arr[1]}"; echo "${arr[0]}";} <<< "arg1 arg2"
arg2
arg1
그러나이 좋은 접근 방식입니까?
반드시 그런 것은 아닙니다. 이러한 접근 방식의 문제점은 매우 구체적이라는 것입니다-인수를 쉽게 인용 할 수 없으므로 공백이없는 인수 만 가질 수 있습니다.
bash-4.3$ { read -r a1 a2; echo "$a1"; echo "$a2";} <<< "'arg1 with space' arg2"
'arg1
with space' arg2
물론 이것은 실제 세계에서는 복잡한 주장을 다루어야하기 때문에 널리 사용되는 것은 아니며, 따라서이 방법은 실용적이지 않습니다. 기능이 훨씬 유연합니다. 그리고 args 문자열을 인용해야 할 필요성이 빨라집니다.
한계에도 불구하고, 간단한 문자열을 인수로 사용하여 단어 분할을 할 수 있으므로 부분적으로 별칭에 인수를 줄 수 있습니다.