cat이 출력한 값을 가져옵니다.

cat이 출력한 값을 가져옵니다.

cat의 결과를 변수에 저장하면 다음과 같은 결과를 얻습니다.

wfpd=$'16213\r'

이 결과를 다른 명령의 인수로 사용할 수 있도록 숫자 값으로 변환하려면 어떻게 해야 합니까?

답변1

매개변수 확장을 사용하여 후행을 제거할 수 있습니다 \r. %이는 "값 끝에서 제거"를 의미합니다.

wfpd=$'16213\r'
wfpd=${wfpd%$'\r'}
((wfpd == 16213)) || echo Wrong

답변2

만약 너라면알다$wfpd제거해야 하는 값의 끝에 문자가 있습니다. bash또는 zsh또는 busybox¹를 사용하는 경우 sh이를 수행할 수 있습니다.

wfpd="${wfpd:0:-1}"

이렇게 하면 변수 값의 마지막 문자가 무엇이든 제거됩니다. 이는 위의 셸에 특정한 하위 문자열 확장으로, 오프셋 0부터 문자열에서 1을 뺀 마지막 문자까지 문자 값으로 확장됩니다.


1.28.0 이상 또는 ENABLE_HUSH_BASH_COMPATfor ( 기본값) 로 빌드된 경우hushENABLE_ASH_BASH_COMPATash

답변3

ksh93, zsh또는 를 사용하면 bash다음을 사용할 수 있습니다.

wfpd=${wfpd//[^[:digit:]-]}

콘텐츠에서 0123456789-를 제외한 모든 문자를 제거하려면 $wfpd(10진 정수로 가정하고 부동 소수점 또는 16진수를 조정해야 합니다...)

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

wfpd=${wfpd%%[![:digit:]-]*}

$wfpd0123456789- 이외의 첫 번째 문자로 시작하는 부분을 제거하거나:

wfpd=${wfpd%"${wfpd##*[[:digit:]]}"}

소수점 마지막 자리 이후는 모두 제거하세요.

다음을 수행하는 대신:

wfpd=$(cat < file)

다음과 같이 할 수도 있습니다.

IFS=$'\r' read wfpd rest_ignored < file

새 프로세스를 생성하거나 명령을 실행하지 않고도 첫 번째 \r줄 까지 파일의 첫 번째 줄을 읽습니다 .$wfpd

답변4

변수 이름에서 숫자를 제외한 모든 항목을 제거할 수도 있습니다. 변수 이름이 라는 파일에 저장되면 file.txt다음이 수행됩니다.

cat file.txt 
wfpd=$'16213\r'

cat file.txt | sed 's/[^0-9]*//g'
16213

관련 정보