質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

Q&A

解決済

3回答

33926閲覧

シェルスクリプト 変数の型を確認したい。

suvera

総合スコア106

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

0グッド

1クリップ

投稿2016/09/05 01:56

編集2016/09/05 01:57

タイトルのままですが

変数に入っている値の型が何なのかを確認する方法を教えて下さい。
int型ならint、stringならstringと返ってくるようなものはなにかないんでしょうか?
探しても上手く見つからずに難航しています。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

Bashでdeclareコマンドやtypesetコマンドを使って整数や文字列、配列としてしたものを確認したいのであれば、declareコマンドの-pオプションを使うことができます。

bash

1# 変数iを整数として宣言 2declare -i i=1 3# iをインクリメントして表示 4i=i+1 5echo $i #=> 2 6 7# declare -pでどのように宣言されたかを確認 8declare -p i 9# declare -i i 10# と表示されるので、これを活用する

また、zshであれば${(t)foo}のようにして変数の型を確認できます。

declare -i i=1 echo ${(t)i} # integer # と表示される s=hoge echo ${(t)s} # scalar # と表示される

POSIXに準拠したいのであれば、確認することどころかそもそも変数に型というものが存在しません。変数の内容が整数のようなものかどうか確認するなら、grepなどを使って、

i=0 if echo "$i" | head -n1 | grep '^[0-9]\+$' >/dev/null; then echo "integer" else echo "not integer" fi

とするといいんじゃないかと思います。

投稿2016/09/05 02:15

MakeNowJust

総合スコア545

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

Bashなどで拡張された場合についてはともかく、#!/bin/shの範囲内で考えるシェルスクリプトについては、データ型はありません。すべてが文字列です。

exprはコマンド形式となっていますが、受け取るものは数値の文字列であって、数値そのものではありません。

与えられたデータが数値かどうかについては、正規表現でチェックする、あるいはexprbcに投げてみて計算できるかどうかチェックする、などの方法があります。

投稿2016/09/05 02:04

編集2016/09/05 02:06
maisumakun

総合スコア145184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

suvera

2016/09/05 02:14

なるほど、探しても見つからないわけです。 知らないまま探し続けるところでした。ありがとうございます。
guest

0

変数の属性は、man bashの、組み込みコマンドのtypeset declareの所を見てください。
https://linuxjm.osdn.jp/html/GNU_bash/man1/bash.1.html

それとも、数字だけからなる文字列なのか、数字以外も含む文字列なのか、判断したいと言うことでしょうかね?

Bash

1if test -n "$A" -a -z "${A//[0-9]/}" 2then echo 数字だけ 3else echo 数字以外あり もしくは 空 4fi

(数字を全部削除して空だったら、元の文字列が数字だけだったと言うこと)

投稿2016/09/05 02:10

編集2016/09/05 02:23
otn

総合スコア84555

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問