C에서처럼 bash에 네임스페이스를 제공하는 방법이 있나요?

C에서처럼 bash에 네임스페이스를 제공하는 방법이 있나요?

제가 말한 것은 C에서는 명령문과 함께 네임스페이스를 사용할 수 있다는 것입니다. using namespace blah blah blahBash에서도 동일한 작업을 수행할 수 있습니까?

답변1

C에는 네임스페이스가 없지만 C++에는 있습니다. 하지만 C에서는 그렇지 않습니다.

아니요, 둘 다 네임스페이스가 없습니다 bash. bash지역 변수, 함수, 환경 변수라는 세 가지 네임스페이스가 있습니다. 따라서 변수와 함수를 모두 가질 수 있습니다 foo. foo()그러나 두 가지 다른 foo()기능은 아닙니다. 정의하면 두 번째 것이 항상 첫 번째보다 우선합니다.

에서 bash이름 충돌을 처리해야 하는 경우 일반적인 해결책은 소스 변수 및/또는 함수에 접두사 또는 접미사를 제공하는 것입니다.

답변2

아니요, bash 자체에는 네임스페이스가 없습니다. 그러나 source이 명령을 사용하면 특정 스크립트로 선택적으로 가져올 수 있는 bash 모듈 라이브러리를 구축할 수 있습니다 . 실제로 import최신 프로그래밍 언어의 구문을 에뮬레이트하는 함수를 작성할 수 있습니다.

예를 들어 다음과 같이 할 수 있습니다.

#!/bin/bash
[[ -e "$HOME/libbash/core.sh" ]] && {
    source "$HOME/libbash/core.sh"
}
include "string"   # sources $HOME/libbash/string.sh
include "fs/msys"  # sources $HOME/libbash/fs/msys.sh"

이는 ~/libbash 폴더에 core.sh 및 다음 가져오기 정의가 포함될 것으로 예상합니다.

#!/bin/bash
#echo "${BASH_SOURCE[0]}"
LIBBASHDIR="$HOME/libbash"

import () {
    for f in "$@"; do
        if [[ -f "$LIBBASHDIR/$f.sh" ]]; then
            source "$LIBBASHDIR/$f.sh"
        else
            echo >&2 "import: not found: '$f.sh'"
        fi
    done
}

스크립트는 귀하의 시스템에서만 실행되며, 이는 bash 스크립트의 가장 일반적인 사용 사례 중 하나인 다른 사람의 시스템에서 실행되는 설치 스크립트 생성에 위배됩니다. 그러나 제어하는 ​​하나 이상의 컴퓨터에서 스크립트를 작성할 때 동일한 관용구를 많이 반복하는 경우 시간을 많이 절약할 수 있습니다.

관련 정보