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

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

新規登録して質問してみよう
ただいま回答率
85.48%
シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

Q&A

3回答

958閲覧

シェルスクリプトの変数の使い方

muku007

総合スコア14

シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

0グッド

1クリップ

投稿2020/02/18 00:48

漠然としたことですが、意見をお聞きしたくて書きました。
下記のようなコードは、どのような処理をするのでしょうか?

abc=${abc#000} abc=${abc#00} abc=${abc#0} ggg=$((${ggg} + ${abc}))

ポイント1:abc#000は何を意味するのでしょうか

ポイント2:abc=${abc#000}
abc=${abc#00}
abc=${abc#0}  このように複数並べて書くと何ができるのでしょうか?

よろしくお願いいたします。

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

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

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

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

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

guest

回答3

0

man bash を見ましょう。

abc=${abc#000}は、${abc}の先頭3文字が000ならそれを削除したものということです。
abc=${abc#00}は、${abc}の先頭2文字が00ならそれを削除したものということです。
abc=${abc#0}は、${abc}の先頭1文字が0ならそれを削除したものということです。
3つ並べることで、0001 0012 0123などが1 12 123になります。
00001も1つ目の代入で01になり、3つ目の代入で1になりますね。
つまり、先頭の6個以下のゼロが削除されます。

先頭がゼロの数字文字列は8進数値とみなされるので、ゼロを消しているのでしょう。
#追記
これ、abcにもし0が入る可能性があれば、先頭ゼロの削除で空文字列になっちゃうので、足し算の時にエラーになりますね。
対応方法は複数ありますが、そのあたりは大丈夫なのでしょうか?

投稿2020/02/18 01:05

編集2020/02/18 09:23
otn

総合スコア84505

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

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

0

お答えはでているので最後の計算の部分 

bash

1abc=0001000 2ggg=234 3 4ggg=$(( ${ggg} + 10#${abc} )) 5 6または 7ggg=$(bc<<<"${ggg} + ${abc}")

投稿2020/02/18 02:51

編集2020/02/18 03:02
amura

総合スコア333

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

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

0

回答はotnさんのを参照してもらうとして、
bashスクリプトで何が起こる(起こっている)か解らないときの手助けに。

bashコマンドに-xオプションを付けて実行してみよう
各コマンド(変数展開後)が表示されるので何が起きているのか調べる時に便利です。

bash

1#!/bin/bash 2abc=000000123 3ggg=321 4abc=${abc#000} 5abc=${abc#00} 6abc=${abc#0} 7ggg=$((${ggg} + ${abc}))

console

1$ bash -x ./test.sh 2+ abc=000000123 3+ ggg=321 4+ abc=000123 5+ abc=0123 6+ abc=123 7+ ggg=444

投稿2020/02/18 01:37

編集2020/02/18 01:44
Y.H.

総合スコア7914

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

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

muku007

2020/02/18 02:11

abc=${abc#000} abc=${abc#00} abc=${abc#0} と並べると最後のabc=${abc#0}だけが有効になるだけだと思いますが 3つ並べるのに意味があるのでしょうか?
Y.H.

2020/02/18 02:16

> 最後のabc=${abc#0}だけが有効になる なぜ?全部有効だよ。 上から順に実行されます。私の回答の「console」に記載の通りです。 abc=000000123 の結果: abcには「000000123」が入り abc=${abc#000} の結果: abcには「000123」が入り abc=${abc#00} の結果: abcには「0123」が入り abc=${abc#0} の結果: abcには「123」が入る
Y.H.

2020/02/18 02:51

$ cat ./test.sh #!/bin/bash abc=000000123 echo "abc="${abc} ggg=321 abc=${abc#000} echo "abc="${abc} abc=${abc#00} echo "abc="${abc} abc=${abc#0} echo "abc="${abc} ggg=$((${ggg} + ${abc}))
Y.H.

2020/02/18 02:51

実行結果 $ bash ./test.sh abc=000000123 abc=000123 abc=0123 abc=123
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問