한 변수의 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
해시 값이 변경된다는 점에 유의하세요.
md5
이 md5
유틸리티가 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")