한 쉽고 신속 당 25 제한)
included.
# 9 자 on은 검사 된 문자의 수와 현재의 문자가 공백인지 여부를 모두 추적하면서 모든 문자를 개별적으로 파싱하는 것입니다.
이 예에서는 3 개의 변수를 사용합니다. $ inputvar, 전체 문자열을 유지해야하며 변경되지 않습니다; $ resultvar, 잘라 내기 섹션을 보유합니다; $ i는 루프 내에서 사용되지만 겹쳐 쓰여집니다.
for ((i=0;i>-1;i++)); do #Start $i at zero, increment every loop, and don't break normally.
if [[ $i -le $((25 - 2)) ]]; then #If $i is less than or equal to 25*
resultvar="$resultvar""${inputvar:$i:1}" #Add character at position $i to $resultvar
else #If $i is greater than 25
if [[ ${inputvar:$i:1} == " " || -z ${textvar:$i:1} ]]; then #If character is a space
break #Exit loop; we're done here.
else #Otherwise
resultvar="$resultvar""${inputvar:$i:1}" #Add to $resultvar like before
fi
fi
done
* 길이 검사는 $ ((25 - 2))입니다. 이것은 우리가 $ i = 0로 시작한다는 사실과 프로세스 순서가 공백 문자를 검사하는 방법 때문입니다. 이 두 가지 모두 우리가 의도 한 것보다 긴 문자열을 효과적으로 반환하게하므로 문자열 길이에서 2를 뺀 것이 부정됩니다.
문을 한 줄로 만들 수도 있습니다.
for ((i=0;i>-1;i++)); do if [[ $i -le $((cutlength - 2)) ]]; then resultvar="$resultvar""${textvar:$i:1}"; else if [[ ${textvar:$i:1} == " " || -z ${textvar:$i:1} ]]; then break; else resultvar="$resultvar""${textvar:$i:1}"; fi; fi; done
멋진 해결책은 아니지만 어떤 방법 으로든 해결해야합니다.
질문에 해당 입력에 대한 샘플 입력과 원하는 출력을 추가하십시오. – Cyrus
단어 중간에 25자를 입력하면 어떻게됩니까? 줄을 25 자보다 짧게 만드시겠습니까? "cutting"은 "나머지 줄을 지우다"또는 "linebreak를 삽입"을 의미합니까? (Cyrus의 코멘트를 참조하십시오.) –
또한 25 자 이상인 단어는 어떻게되어야합니까? – Siguza