Bash의 다른 명령에서 변수에 값 할당

Bash의 다른 명령에서 변수에 값 할당

SUFFIX 변수가 /dev/fd/[fd]를 유지하도록 bash에서 이 작업을 수행합니다.

SUFFIX=<( echo "&*645\[]}#@name" | sed -r 's/[^[:alnum:]]+/_/g' )

괄호 사이에 실행된 명령의 실제 결과를 어떻게 할당해야 합니까? 따라서 이 경우 SUFFIX에 값을 할당해야 합니까 _645_name?

답변1

다음 구문을 사용했습니다.프로세스 교체, 한 명령의 출력을 다른 명령의 입력으로 전달합니다. 하지만 당신이 원하는 것은명령 대체, 명령의 출력을 문자열로 가져옵니다. 명령 대체를 사용하십시오 $(…).

SUFFIX=$( echo "&*645\[]}#@name" | sed -r 's/[^[:alnum:]]+/_/g' )

bash를 사용하는 경우 자체 내장 구조를 사용하여 이를 수행할 수 있습니다. 정리하려는 텍스트가 변수에 있는 경우 foo:

shopt -s extglob
SUFFIX=${foo//+([^[:alnum:]])/_}

답변2

이것이 접미사인 경우 대답은 간단해야 합니다.

suffix="${str##*[!_A-Za-z0-9]}"

이렇게 얻은 조각은 기껏해야 머리와 꼬리만 얻을 수 있다. 하지만 다음을 얻을 수 있습니다.

head="${str%"${tail:="${str##*[!_A-Za-z0-9]"}"}"}"

관련 정보