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時間