bash 함수는 명령줄 인수의 공백을 처리합니다.

bash 함수는 명령줄 인수의 공백을 처리합니다.

항상 한 디렉토리 위로 이동 c d..하거나 입력하세요.c d ..

내 .bash_profile에 아래 함수를 넣으면 전체 매개변수 세트( )가 아니라 공백 앞의 첫 번째 문자인 "c"만 해석됩니다 c d... 이 문자는 2개만 있어야 한다고 생각합니다. 오류 발생

bash: c: - command not found

배쉬 4.2.46에서.

명령줄에서 공백을 사용하여 매개변수를 해석하면 나중에 더 많이 사용될 수 있으므로 이 문제를 해결하고 싶었습니다.

기능:

changedir() {  
    if [[  $@ = "c d.." ]]; then  
        command cd ..  
    else  
if [[  $@ = "c d.." ]]; then  
        command cd ..  
    fi   
fi   
}

또한 공백을 포함하여 전체 인수 문자열을 사용하는 것이 더 좋습니다: $* 또는 $@?

답변1

글쎄요, 함수 이름은 changedir쉘이 명령을 받을 때만 실행되도록 지정되었습니다 changedir [whatever]. 명령이 실행될 때마다 실행되지는 않습니다. 입력한 각 명령줄에 대해 함수를 실행하기 위해 트랩을 남용할 수 있지만 DEBUG여기서는 그렇게 할 필요가 없습니다.

대신 인수 또는 및 인수가 주어졌을 때 실행되는 c함수 를 생성하세요 .cd ..d..d..

c() {
    if [[ $1 = 'd..' ]] ||
       [[ $1 = 'd' && $2 = '..' ]]; then
        command cd -- ..
    else
        echo "Invalid arguments to 'c'! Only 'c d..' and 'c d ..' are supported." >&2
    fi 
}

또는 Bash에서 사용할 수 있습니다 shopt -s autocd. 이렇게 하면 디렉토리 이름만 지정하면 쉘이 해당 디렉토리로 이동하게 됩니다. 따라서 foobar동일한 작업이 수행되고 cd foobar(명령어가 없는 경우 foobar) ..디렉터리만 입력됩니다.

관련 정보