ウェブサイト検索

Bash関数とローカル変数


この記事では、Bashでのローカル変数関数の使用と作成について説明します。Bash関数を作成することで、コードをより構造的にすることができ、ローカル変数はセキュリティを向上させ、コーディングミスを避けるのに役立ちます。さあ、始めましょう!

しかし、コードは複雑で、少し慣れる必要があります。探求してみましょう。

まず、ローカル変数 REVERSE を作成する関数 func3 を定義します。私たちは、サブシェル ($()) を呼び出してそこに値を割り当てます。このサブシェル内で、関数に渡されたもの ($ {1}) をエコーし、その出力を rev コマンドにパイプします。

revコマンドは、パイプ(または他の方法)から受け取った入力を逆順に表示します。また、ここで興味深いのは、変数${1}がサブシェルの中に留まるということです!それは完全に過ぎ去っています。

次に、func3 関数内から、出力を印刷します。ただし、この出力は画面に送信されることはなく、実際には私たちの関数呼び出し自体によって取得されるため、'global'REVERSE 変数に保存されます。

私たちは入力を"abc"に設定し、サブシェル内からfunc3関数を再度呼び出し、INPUT変数を渡し、出力をREVERSE変数に割り当てます。スクリプト内のローカルREVERSE変数と'グローバル'REVERSE変数の間には、全く接続がないことに注意してください。

グローバル変数、特にREVERSEを含む任意のグローバル変数は関数に渡されますが、同じ名前のローカル変数が定義されると、ローカル変数が使用されます。また、このことを別の小さなスクリプトtest4.shで証明し、確認することもできます。

#!/bin/bash

func3(){

local REVERSE="$(echo "${1}" | rev)"

echo "${REVERSE}"

}

INPUT="abc"

REVERSE="test"

func3 "${INPUT}"

echo "${REVERSE}"

実行されると、出力はcbaとtestです。このcbaは、今回はfunc3関数内の同じecho "$ {REVERSE}"によって生成されますが、今回はコードの下にあるようにキャプチャされるのではなく、直接出力されます。なぜなら、func3 "$ {INPUT}"関数はサブシェル内から呼び出されていないからです。

このスクリプトは、以前に取り上げた2つの学習ポイントを強調しています。まず第一に、スクリプト内でfunc3関数を呼び出す前にREVERSE変数を"test"に設定したにもかかわらず、ローカル変数REVERSEが優先され、グローバル変数の代わりに使用されるということです。

第二に、呼び出された関数 func3 内で同じ名前のローカル変数が使用されていたにもかかわらず、私たちの 'グローバル'REVERSE 変数がその値を保持することです。

まとめ

ご覧の通り、Bash関数、変数の受け渡し、ローカルおよびセミグローバル変数の使用により、Bashスクリプト言語は多用途で、コーディングが容易であり、構造化されたコードを定義する可能性を提供します。

ここで言及すべき注目すべき点は、コードの可読性の向上と使いやすさに加えて、ローカル変数を使用することで、変数が関数などのコンテキストの外部からアクセスできないため追加のセキュリティが提供されるということです。バッシュでコーディングする際は、関数とローカル変数を楽しんでください!

Bashについてさらに学びたい場合は、「Bashでファイル名を正しくパースする方法」と「bash -cと組み合わせてxargsを使用して複雑なコマンドを作成する方法」をチェックしてください。

関連記事: