bash 스크립트에서 명령에 변수를 사용하고 새 변수에 할당하는 방법은 무엇입니까?

bash 스크립트에서 명령에 변수를 사용하고 새 변수에 할당하는 방법은 무엇입니까?

한 변수의 MD5를 다른 변수에 저장하려고 합니다. 백틱과 최신 ()표기법 사이에서 명령을 통해 실행되는 변수의 값을 다른 변수에 할당하는 방법을 알 수 없습니다. 샘플 코드:

#!/bin/bash
backup_dir=$(date +%Y-%m-%d_%H-%M-%S)
hashed=$( ${backup_dir} | md5)

여기서 hashed변수는 작동하지 않으며 리터럴 문자열을 가져와 backup_dir해시합니다. 따라서 해시 값은 항상 동일합니다. 어떤 아이디어가 있나요?

감사해요!

답변1

md5변수 값을 읽고 backup_dir해당 MD5 ​​해시 합계를 반환하려고 합니다 .

명령 파이프라인

${backup_dir} | md5

$backup_dir명령으로 실행을 시도하고 출력 을 md5.d41d8cd98f00b204e9800998ecf8427e$hashed

대신 다음과 같은 것을 사용해야합니다.

printf '%s' "$backup_dir" | md5

md5표준 입력 스트림에 값을 제공합니다 .

echo "$backup_dir" | md5또는 를 사용할 수도 있지만 md5 <<<"$backup_dir"이렇게 하면 값 끝에 개행 문자가 추가되어 $backup_dir해시 값이 변경된다는 점에 유의하세요.

md5md5유틸리티가 BSD 및 BSD 유사 시스템(예: macOS)에서 공통적으로 사용되는 경우 다음을 사용해야 합니다.

md5 -q -s "$backup_dir"

-s옵션은 문자열을 인수로 사용하여 해당 문자열의 해시만 인쇄하고 다른 내용은 인쇄하지 않습니다 -q.md5

요약:

#!/bin/bash
backup_dir=$(date +%Y-%m-%d_%H-%M-%S)
hashed=$(md5 -q -s "$backup_dir")

관련 정보