제가 말한 것은 C에서는 명령문과 함께 네임스페이스를 사용할 수 있다는 것입니다. using namespace blah blah blah
Bash에서도 동일한 작업을 수행할 수 있습니까?
답변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 스크립트의 가장 일반적인 사용 사례 중 하나인 다른 사람의 시스템에서 실행되는 설치 스크립트 생성에 위배됩니다. 그러나 제어하는 하나 이상의 컴퓨터에서 스크립트를 작성할 때 동일한 관용구를 많이 반복하는 경우 시간을 많이 절약할 수 있습니다.