• 締切済み

シェル(ksh)で変数にある文字列を取り出す

お世話になります。 シェルで変数(例えば: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です。 わかるかたがいらっしゃたら教えてください。 宜しくお願いします。

みんなの回答

  • elflend
  • ベストアンサー率64% (58/90)
回答No.2

こんにちわ。これはコマンドの引数で解決すると思います。 tail -c コマンドを使うと文字列の後ろからバイト単位で文字列を 引っ張ってくることができます。 ksh はやったことないので分かりませんが sh とあまり変わらないとおもうので OUT1 にほしい文字列が入っていたとしたら多分下記でしょうか。 OUT=`echo $OUT1 | tail -c3` $OUT1 の中身を echo で表示させ、その文字後ろから3バイトを引っ張るという意味になります。 興味があれば man tail でも見てみてください。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

「コマンドラインから入力すると期待通りに動くけどスクリプトにするとうまくいかない」ということだと, 「スクリプトにしたときに, そのスクリプトを動かしているシェルは何か」ということを確認した方がよいと思います. 実はスクリプトは ksh じゃなくって sh が動かしてたりして.

osa_mu
質問者

お礼

ありがとうございます。 確かに動かしているシェルがなにか確認はしていません。 初心者の質問ですが、shとはbshということですか? bshだとしたら、変数の文字列を後ろから取得する方法及び 変数にはいっている文字数をスクリプトで取得する方法を 教えていただけないでしょうか? 超初心者の質問で申し訳ありません。 宜しくお願いいたします。 ご回答ありがとうございます。

関連するQ&A