トップページ > プログラム > 2019年07月23日 > vatz3/hX

書き込み順位&時間帯一覧

6 位/165 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000000002210000005



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
348
シェルスクリプト総合 その30
文字コード総合スレ Part12

書き込みレス一覧

シェルスクリプト総合 その30
348 :デフォルトの名無しさん[sage]:2019/07/23(火) 15:21:00.97 ID:vatz3/hX
シェルスクリプトで引数が整数であることを判定する可搬で高速な方法ってなんだろう
思い付いたのは
isint() {
case "$1" in
[0-9][0-9]*) printf '%d\n' $1 ;;
*) return 22 ;;
esac
}

…ところで$1がないときは標準入力から値を取得するっていう操作ってどう実装するんだろう?
文字コード総合スレ Part12
528 :デフォルトの名無しさん[sage]:2019/07/23(火) 15:56:55.39 ID:vatz3/hX
https://github.com/qntm/base65536
↑Unicodeの基本多言語面を使ったエンコード方法w
シェルスクリプト総合 その30
357 :348[sage]:2019/07/23(火) 16:11:28.72 ID:vatz3/hX
みなさんありがとうございます。
↓助言を参考にさしてもらってこういう形にしました。
isint() { set -- "$1"
case ${1#-} in
''|*[!0-9]*) return 22 ;;
*) true ;;
esac
}
「$1が設定されていなければ標準入力を$1に」というのはシェルスクリプトでは
実現が難しそうなので諦めます。
シェルスクリプト総合 その30
359 :348[sage]:2019/07/23(火) 16:15:37.53 ID:vatz3/hX
……と思いましたが良い感じの構文を思い付きました。
isint() { set -- "${1:-"$(cat)"}"
case ${1#-} in
''|*[!0-9]*) return 22 ;;
*) true ;;
esac
}
これでどうでしょうかね。もし$1が設定されていなければcat(1)が実行されて
cat(1)には引数が渡っていない(この時は$1が設定されていない)ので
If no file operands are specified, the standard input shall be used.
(http://pubs.opengroup.org/onlinepubs/9699919799/utilities/cat.html)
に従って標準入力が読み込まれてset -- 〈標準入力の内容〉となって$1に標準入力が設定される。
シェルスクリプト総合 その30
362 :デフォルトの名無しさん[sage]:2019/07/23(火) 17:17:45.59 ID:vatz3/hX
>>361
申し訳ないです。完全に見落してました。


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。