bash 중괄호 확장을 따옴표 내에서 수행할 수 있습니까?

bash 중괄호 확장을 따옴표 내에서 수행할 수 있습니까?

내 것을 건조하게 만들기 위해 bashrc이것을 바꿔 보았습니다.

CDPATH=".:~/Development:~/Development/resources:~"

이와 관련하여,

CDPATH=".:~/Development{,/resources}:~"

그러나 인용된 문자열 내에서는 중괄호 확장이 수행되지 않는 것으로 나타났습니다. 이것을 달성할 수 있는 방법이 있나요?

답변1

예, 실제로는 다음과 같습니다.

set . ~/Development{,/resources} ~
IFS=:; CDPATH="$*"

특수 인수는 각 위치 인수 사이의 "$*"첫 번째 문자를 대체합니다. $IFS따라서 필수 매개변수를 별도의 매개변수로 확장하면 set할당 시 필요에 따라 적절한 구분 기호를 빠르게 채울 수 있습니다.

제안된 대로 값을 저장/복원하는 방법에 대한 몇 가지 지침을 사용할 수 있는 경우 $IFS다음을 수행할 수 있습니다.

CDPATH=$IFS
set . ~/Development{,/resources} ~
IFS=:${IFS+;IFS=\$CDPATH}
eval 'set "$*"; unset IFS'"
      $IFS;    CDPATH=\$1"

때로는 환경을 깨끗하게 유지하기 위해 몇 가지 조정을 할 가치가 있습니다. 매개 변수가 설정 여부에 관계없이 환경에 영향을 미치고 이에 따라 다른 방식으로 영향을 미치는 경우 주의하는 것이 좋습니다.

그러나 이러한 예방 조치는 지속적인 제어를 보장할 수 없는 환경에서만 실제로 필요합니다. 즉, 자신의 rc 파일에서는 이 작업을 수행할 필요가 없습니다. 이와 같은 상황에서는 영구적인 통제가 거의 보장됩니다.(그리고~해야 한다)자신에게 맞는 특수 쉘 매개변수를 설정하십시오.

관련 정보