LoginSignup
3
3

More than 5 years have passed since last update.

[tcsh] RHEL7でcshの数字の扱いが変わった

Last updated at Posted at 2015-11-18

目的

  • 知人に「RHEL6とRHEL7では、cshの前ゼロ付きの数字の扱いが違う」と聞きました
  • RHEL6 では @ コマンドで、前ゼロ付きの数字は(当然)8進数として扱われます
  • RHEL7 では前ゼロ付きでも10進数で扱われるようになったらしい
  • 「RHELクローン」といわれる CentOS 7 で動作を確認してみました
  • (個人的には csh は、あまり使わないんだけどね)

CentOS 7 で確認

環境

名前 バージョン
CentOS 7.1.1503
tcsh 6.18.01
bash 4.2.46
expr 8.22

確認結果

とりあえず、実行してみました。

$ csh
$ set prompt="% "
% @ var = 014 - 04
% echo $var
10
% @ var = 14 - 4
% echo $var
10

確かに、前ゼロ付きでも10進数になっていますね。

マニュアル man csh を確認すると parseoctal というシェル変数が追加されていて、何か値を設定すると今まで通り8進数で扱えるみたいです。

% set parseoctal=true
% @ var = 014 - 04
% echo $var
8
% unset parseoctal
% @ var = 014 - 04
% echo $var
10
% exit

ここでは true に設定していますが、設定値は何でもよさそうです。
(ちなみにパーミッションやumask などは、このシェル変数に関係なく今まで通り8進数で指定可能ですね。当たり前ですが)

念のため、bash と expr についても確認してみました。

$ echo $((014-04))
8
$ echo $((14-4))
10
$ expr 014 - 04
10
$ expr 14 - 4
10
$

CentOS6で確認

CentOS6 でも試してみることにします。

環境

名前 バージョン
CentOS 6.7
tcsh 6.17.00
bash 4.1.2
expr 8.4

環境準備

でも、これだけのためにインストールするのは面倒なので、最近流行の Docker で試してみたいと思います。

とりあえず Docker をインストール。

$ sudo yum -y install docker
$ sudo systemctl start docker.service
$ sudo systemctl enable docker.service

確認結果

Docker のコンテナとして、CentOS6 を実行します。

$ sudo docker run -it centos:6 /bin/sh
(略)
sh-4.1# yum -y install tcsh
(略)
sh-4.1# cat /etc/centos-release
CentOS release 6.7 (Final)
sh-4.1# csh --version
tcsh 6.17.00 (Astron) 2009-07-10 (x86_64-unknown-linux) options wide,nls,dl,al,kan,sm,rh,color,filec
sh-4.1# csh
[root@133911c01bd7 /bin]# @ var = 014 - 04
[root@133911c01bd7 /bin]# echo $var
8
[root@133911c01bd7 /bin]# @ var = 14 - 4
[root@133911c01bd7 /bin]# echo $var
10
[root@133911c01bd7 /bin]# exit

確かに CentOS 6.7 では、前ゼロ付きは8進数で扱っていますね。
念のため、他のケースも確認しましたが CentOS 7.1 と同じですね。

sh-4.1# echo $((014-04))
8
sh-4.1# echo $((14-4))
10
sh-4.1# expr 014 - 04
10
sh-4.1# expr 14 - 4
10
sh-4.1# exit

後始末

とりあえず、コンテナは削除しておきます。

$ sudo docker rm $(sudo docker ps -aq)

Docker イメージはまだ使うかもしれないので、もう少し残しておこう。

まとめ

RHEL6とRHEL7というよりは、tcsh の 6.17.00 と 6.18.01 で挙動が変わっているんですかね。

とりあえず、ゼロ付きの数字を8進数と10進数のどちらで扱うかのまとめ。

コマンド RHEL6, CentOS6 RHEL7, CentOS7
tcsh 8進数 10進数 1
bash 8進数 8進数
expr 10進数 10進数

  1. シェル変数parseoctalに何か値を設定すれば8進数として解釈する 

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3