ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

QNo.4117080 シェル(ksh)で変数にある文字列を取り出す
質問者:osa_mu お世話になります。
シェルで変数(例えば:OUT)に入っている文字列ついて2つ質問させてください。
1:変数に入っている文字列を後ろから何文字(固定長)取り出したい場合にどのようすればよいか教えてください。
試してみたのは以下です。
OUT1=abcde #変数OUT1に文字列abcdeを代入
OUT=${OUT1:3:(-1)}
(固定長3バイト後ろから取り出したい(cde))
をファイルに書きこんで起動すると、上記の処理にいったところで、"置換が正しくありません"とでてしまいます。

2:変数に入っている文字列の文字数を取り出したい。
試してみたのは以下です。
OUT1=abcdec #変数OUT1に文字列abcdeを代入
OUT=${#OUT}
これは、コマンドラインでecho ${#OUT}とすると6と文字数を表示してくれますが、ファイルに書きこんで起動すると上記同様"置換が正しくありません"と表示されてしまいます。

OSは、SUN OS 5.8です。
わかるかたがいらっしゃたら教えてください。
宜しくお願いします。
困り度:
  • すぐに回答を!
質問投稿日時:
08/06/21 08:41
最新から表示回答順に表示

回答

ANo.2 こんにちわ。これはコマンドの引数で解決すると思います。
tail -c コマンドを使うと文字列の後ろからバイト単位で文字列を
引っ張ってくることができます。

ksh はやったことないので分かりませんが sh とあまり変わらないとおもうので
OUT1 にほしい文字列が入っていたとしたら多分下記でしょうか。

OUT=`echo $OUT1 | tail -c3`

$OUT1 の中身を echo で表示させ、その文字後ろから3バイトを引っ張るという意味になります。
興味があれば man tail でも見てみてください。
回答者:elflend
種類:回答
どんな人:専門家
自信:自信あり
回答日時:
08/08/20 12:21
この回答への補足この回答に補足をつける(質問者のみ)
この回答へのお礼この回答にお礼をつける(質問者のみ)

回答

ANo.1 「コマンドラインから入力すると期待通りに動くけどスクリプトにするとうまくいかない」ということだと, 「スクリプトにしたときに, そのスクリプトを動かしているシェルは何か」ということを確認した方がよいと思います.
実はスクリプトは ksh じゃなくって sh が動かしてたりして.
回答者:Tacosan
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:
08/06/23 18:15
この回答への補足この回答に補足をつける(質問者のみ)
この回答へのお礼ありがとうございます。
確かに動かしているシェルがなにか確認はしていません。
初心者の質問ですが、shとはbshということですか?
bshだとしたら、変数の文字列を後ろから取得する方法及び
変数にはいっている文字数をスクリプトで取得する方法を
教えていただけないでしょうか?
超初心者の質問で申し訳ありません。
宜しくお願いいたします。
ご回答ありがとうございます。
 
最新から表示回答順に表示