나는 간단히 이해했다매개변수 대체, 다음과 같은 하위 문자열 포함
foo="Hello World";
greeting=${foo:0:6}
그런데 이걸 명령어로 할 수 있나요?
greeting="Hello"
md5greeting=$(echo $greeting | md5sum :0:6)
>>b1946a
출력은 "hello" md5sum의 처음 6개 문자입니다.
어떻게 이를 달성할 수 있나요?
답변1
적어도 bash에서는 매개변수 대체가 작동하는 방식이 아닙니다. 실제 변수(매개변수)가 필요하며 이를 직접 조작합니다. 예를 들어:
var=$(echo abcdefgh | cmd1 | cmd2 | ... )
var2="${var:2:4}"
예외는 zsh
명령 대체를 "즉시" 매개변수로 변환하고 위의 작업을 한 줄로 수행할 수 있다는 것입니다.
var2=${"$(echo abcdefgh | cdm1 | cmd2 | ... )":2:4}
답변2
알아채다:
echo $greeting | md5sum
또는 더 안정적입니다.
printf '%s\n' "$greeting" | md5sum
변수 내용의 MD5 해시를 제공하는 대신 변수 내용의 MD5 해시와 개행 문자가 제공됩니다. 변수 콘텐츠의 MD5 해시의 경우:
printf %s "$greeting" | md5sum
처음 6바이트에는 다음과 같은 몇 가지 구현이 있습니다 head
.
printf %s "$greeting" | md5sum | head -c 6
또는 더 휴대성이 뛰어납니다.
printf %s "$greeting" | md5sum | dd bs=1 count=6 2> /dev/null