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: ‘’

関連情報