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_COMPAT
for ( 기본값) 로 빌드된 경우hush
ENABLE_ASH_BASH_COMPAT
ash
답변3
ksh93
, zsh
또는 를 사용하면 bash
다음을 사용할 수 있습니다.
wfpd=${wfpd//[^[:digit:]-]}
콘텐츠에서 0123456789-를 제외한 모든 문자를 제거하려면 $wfpd
(10진 정수로 가정하고 부동 소수점 또는 16진수를 조정해야 합니다...)
POSIXly에서는 다음을 사용할 수 있습니다.
wfpd=${wfpd%%[![:digit:]-]*}
$wfpd
0123456789- 이외의 첫 번째 문자로 시작하는 부분을 제거하거나:
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