
t0mmy
2020年12月30日に参加
学習履歴詳細
Shell Script 基礎
やったこと
書籍「新しいシェルプログラミングの教科書」
- Bash 関数 変数の有効範囲
- 組み込みコマンド
学んだこと
Bash 関数 変数の有効範囲
特に指定がない場合、たとえ関数内で宣言した変数でも、グローバル変数となる。
#!/bin/bash update_hoge() { hoge="hoge" echo $hoge /*hoeg*/ } update_hoge echo $hoge /*hoeg*/
local
修飾子を付与することで、宣言したブロック内でのみ有効な、いわゆるローカル変数となる。
#!/bin/bash update_hoge() { local hoge="hoge" echo $hoge /*hoge*/ } update_hoge echo $hoge /*何も表示されない*/
local
修飾子は、関数内でのみ使用可能。
グローバル領域で使用すると、以下のエラーが発生する。
line 18: local: can only be used in a function
ただし、ネストされた関数内までであれば、有効。
#!/bin/bash func2() { echo $hoge /*hoge*/ hoge="fuga" } func1() { local hoge="hoge" func2 echo $hoge /*fuga*/ } func1 echo $hoge /*何も表示されない*/
呼び出し先(上記の例だと、func2())でも local
を付与すると、上書きされない。
#!/bin/bash func2() { echo $hoge /*hoge*/ local hoge="fuga" } func1() { local hoge="hoge" func2 echo $hoge /*hoge*/ } func1 echo $hoge /*何も表示されない*/
FUNCNAME
関数内でのみ使用できる変数。
関数名を取得できる。
#!/bin/bash hoge() { for name in ${FUNCNAME[@]} do echo $name done } hoge
hoge main
デバッグ等で使用する。
組み込みコマンド
:
ヌルコマンド
常に終了ステータス0を返すコマンド。
これを活用することで、無限ループを表現できる。
while : do 処理 done
printf -v オプション
printf
の結果を、指定した変数に格納できる。
感想
local
修飾子は、typescriptの const
並みに必須となりそうな予感がする。
ShellScript
2022年06月19日(日)
2.0時間