Bash: 멈춘 기능을 건너뛰는 방법은 무엇입니까?

Bash: 멈춘 기능을 건너뛰는 방법은 무엇입니까?
#!/bin/bash

function thous {
    numfmt --g $1 | sed 's/,/./g;s/@//g'
}

aa="1,235"
bb="5,22"
cc=$(echo "$aa + $bb" | bc)

#1
echo $aa
#2
echo $bb
#3
echo $(thous "$cc")
#4
echo "SKIP"

exit

무엇이 보여지는가

(standard_in) 1: parse error
(standard_in) 1: parse error
1,235
5,22

내가 원하는 건

(standard_in) 1: parse error
(standard_in) 1: parse error
1,235
5,22
(some error or nothing at all)
SKIP

이 bash 쉘 코드를 컴파일하려고 하면 #3에 갇히게 됩니다. 그렇다면 처리할 수 없는 것을 무시하고 다음 프로세스를 계속하도록 터미널에 어떻게 지시합니까?

질문이 불분명하다면 알려주세요. 감사합니다.

답변1

스크립트가 중지되면 실제로 numfmt입력을 기다리는 중입니다. 스크립트 Ctrld를 누르면 계속됩니다.

numfmt이는 옵션이 아닌 인수가 제공되지 않고 $cc비어 있는 경우 표준 입력이 형식화되기 때문에 발생합니다 .

이러한 블록을 방지하는 일반적인 기술은 numfmt블록을 읽게 만드는 것입니다 /dev/null.

numfmt --g $1 < /dev/null | sed 's/,/./g;s/@//g'

바라보다첫 번째 반복 후에 이 while 루프가 종료되는 이유는 무엇입니까?이 기술이 얼마나 유용한지에 대한 또 다른 예입니다.

그러나 특정 상황에 따라 더 나은 접근 방식은 다음과 같습니다.변수 참조; 비어 있더라도 numfmt항상 매개변수가 있습니다 .$1

numfmt --g "$1" | sed 's/,/./g;s/@//g'

또한 스크립트에서 옵션 약어를 사용하지 않아야 합니다. --g향후 버전의 스크립트에서 "g"로 시작하는 또 다른 긴 옵션이 도입되면 문제가 발생할 수 있습니다. numfmt이렇게 할 때 매개변수에서 옵션을 분리해야 합니다 --(그렇지 않으면 numfmt음수 값이 거부됩니다).

numfmt --grouping -- "$1" | sed 's/,/./g;s/@//g'

그러면 스크립트가 완료될 때까지 중단 없이 실행됩니다. 계산을 결정하면 $cc예상 결과가 동시에 출력되고 "$1"변형이 표시됩니다 .

numfmt: invalid number: ‘’

관련 정보