계산된 변수에 대한 bash 문자열 조작?

계산된 변수에 대한 bash 문자열 조작?

저는 계산된 문자열을 조작하기 위한 가장 간단한 단일 명령 솔루션을 찾고 있습니다.
예를 들어 계산된 문자열에서 마지막 두 문자를 제거하려면 md5sum이 끝에 "-"와 함께 반환됩니다.

두 가지 지침으로 이를 수행할 수 있습니다.

$ a=$(echo 'ab'|md5sum); a=$(echo ${a:0:-2})
$ echo $a # (not required instruction)
daa8075d6ac5ff8d0c6d4650adb4ef29

아래와 같은 명령 하나로 이 작업을 어떻게 수행할 수 있습니까?

$ a=${(echo 'ab'|md5sum):0:-2}
-bash: ${(echo 'ab'|md5sum):0:-2}: bad substitution

감사해요.

답변1

POSIXly 다음을 사용할 수 있습니다.

a=$(echo 'ab' | md5sum)
a=${a%??}

밝혀 $a지다daa8075d6ac5ff8d0c6d4650adb4ef29

그냥 사용하실거면 2차 작업은 생략하셔도 되지만 ${a%??}, 바로 사용하실거 아니면 추천드리지 않습니다. (코딩 스타일이 발전함에 따라 필요한 값을 생성하는 두 부분이 분리되어 결과적으로 코드 유지 관리가 더 어려워지는 취약한 연결이 생성됩니다.)

한 작업으로 이 작업을 수행하는 것이 가능하지만 약간 덜 효율적입니다.

a=$(echo 'ab' | md5sum | sed 's/..$//')

두 경우 모두 echo 'ab'후행 개행 문자가 MD5 체크섬에 포함됩니다. 을 사용 echo -n 'ab'하거나 이식성이 더 좋을 수 있습니다 printf '%s' 'ab'.

관련 정보