GNU/Linux >> Linux の 問題 >  >> Linux

Bashスクリプト内で変数を使用する珍しい方法

あなたはおそらくBashシェルスクリプトの変数を知っているでしょう。

他のプログラミング言語やスクリプト言語と同様に、変数を使用してデータを保存し、後でそれらを将来のコマンドで参照します。

name="Linux Handbook"
echo "Hello $name!"

そして、「Hello LinuxHandbook!」が印刷されます。

上記の例以外にも、変数が設定されていないときにデフォルト値を入力したり、単一の変数に複数の値を割り当てたりするなど、変数を使用して実行できることは驚くほどたくさんあります。

bashスクリプトでの変数のこれらの異常で高度な使用法を紹介します。

アレイの使用

上記の例を除いて、Bashで見つかる最も一般的なタイプの変数は配列です:

name=("Linux Handbook" "It's FOSS")

上記の例では、両方の Linux Handbookを割り当てています。 およびIt'sFOSS nameの値として 変数。

ただし、各値にアクセスするにはどうすればよいですか?

echo $ nameを実行した場合 、最初の値である Linux Handbookが出力されることがわかります。 。他の値にアクセスするには、変数に別の構文を使用する必要があります。

他の値の取得を開始するには、次のことを理解することから始めましょう。

echo "Hello ${name}!"

これは、変数のすべての値を取得できるようにするための基礎であり、この記事の残りの部分で変数を操作するための残りのメソッドを実行できるようにするためでもあります。

前述の例に戻ると、 $ {variable [number]}を使用できます。 変数から特定のアイテムをプルする構文:

echo "Hello ${name[1]}!"

これは「HelloIt'sFOSS!」を印刷します

上記の例からまだわからない場合は、配列の最初の項目は実際には1ではなく0から始まります。

したがって、 Linux Handbookをプルするには 値の場合、位置0でアイテムをプルします:

echo "Hello ${name[0]}!"

同様に、単に [number]を省略します partは、デフォルトで配列の最初の項目(インデックス0にある項目)に設定するだけです。

インデックスは、配列内のアイテムの位置を意味します。同様に、インデックス0は配列内の項目0です。

そして、それらは、Bash内で実際に見つかるすべての変数タイプを構成します。

それでは、これらの変数を呼び出すときに、実際にそれらの変数を操作して出力を変更する方法を見ていきましょう。

変数が設定されていない場合の値の設定

変数が次のように設定されていない場合、変数をデフォルトで特定の文字列に戻すことができます。

${variable:-string}

この例を見てください:

echo "Hello ${name:-nobody}!"

変数name以降 が設定されていない場合、デフォルトで nobodyになります 上記のコマンドは「Hellonobody!」と出力します。

変数が事前に設定されている場合は、その値が使用されます:

name="Linux Handbook"
echo "Hello ${name:-nobody}!"

上記のコマンドは「HelloLinuxHandbook!」を出力します

変数がである場合の値の設定 すでに設定されています

変数がであるときに特定の値を返すように変数を設定することもできます セットする。これにより、変数は設定されている場合は常に特定の文字列を出力し、設定されていない場合は何も出力しません。

このメソッドの構文は前のメソッドと似ていますが、 +を使用します -の代わりに署名する 。

${variable:+string}

変数名が設定されていないこの例を見てください。したがって、その可変部分については何も出力されず、コマンドの出力は「Hello!」

になります。
echo "Hello ${name:+person}!"

上記の例を変更し、変数 nameを設定します 。この特別な方法では、すでに設定されている値を使用せず、指定した値を使用します。

name="Linux Handbook"
echo "Hello ${name:+person}!"

上記のコマンドは「Helloperson!」を出力します。

$ {variable:-string}を使用するとさらに多くのユースケースが見つかるでしょう。 $ {variable:+ string}の利点の一部としての構文 テスト( [] )のような他のツールですでに達成できます )演算子:

変数への間接参照

次の例では、次の構文を使用します。

${!variable}

これは、機能が少し複雑ですが、機能を確認すると意味があります。

name="Linux Handbook"
variable="name"

echo "Hello ${!variable}!"

「HelloLinuxHandbook」が印刷されます。

その 変数名の前の文字により、通常の変数名が置き換えられますが、その名前が使用されます。 関連する変数を見つけるためにトリングします。

同様に:

  • 変数 文字列nameの代わりに使用されます 、続いて:
  • 名前 Linux Handbookの値の代わりに使用されます 。
変数の長さを見つける

前の方法を使用しましょうが、を交換します の文字 :

${#variable}

このメソッドを使用すると、変数の長さが出力されますが、変数が文字列であるか配列であるかによって、動作が少し異なります。

文字列でその構文を使用する 文字列内の文字数の代わりに変数が使用されます。

variable="name"
echo "Length is ${#variable}."

それは4をprntします。しかし、その一方で、アレイでそれを使用します 配列内のアイテムの数、つまり配列サイズを出力します。ここでは2です。

variable=("name" "word")
echo "Length is ${#variable}."
文字列の小文字化と大文字化

最後に、 ^ を使用して、文字列を大文字にして小文字にすることができます および それぞれ演算子。

これらは、次のように変数名の最後に指定します。

# Capitalizes
${variable^}
${variable^^}

# Lowercases
${variable,}
${variable,,}

1つと2つのキャラクターを提供することの違いは何ですか?

1つだけ提供する(つまり、 $ {variable ^} )は、最初の文字のみを変更し、2つ( $ {variable ^^} )を提供します。 )文字列全体が変更されます。

以下の例は、 Nameを出力します nameの代わりに :

variable="name"
echo "${variable^}"

しかし、これは NAMEを出力します :

variable="name"
echo "${variable^^}"

同様に、変数を小文字で出力することもできます。

以下の例では、 wIDEnameが出力されます :

variable="WIDEname"
echo "${variable,}"

そして、これは widenameを出力します :

variable="WIDEname"
echo "${variable,,}"
まとめ

これらは、Bash内で変数を使用できる方法のほんの一部です。変数の展開に関するBashのドキュメントには、変数を操作するためのさまざまな方法があります。

上記の例がどのように機能したか、または何かが正しく機能していないかについて質問がありますか?以下のコメントセクションに自由に残してください。


Linux
  1. Bashスクリプトでのエラー処理

  2. `eval`なしで{}拡張内の変数を使用しますか?

  3. 複数のシェルスクリプト間で変数を共有しますか?

  1. bash の変数を持つエイリアス

  2. bash から変数をエクスポートして Python で使用する

  3. bash - 大文字と小文字を区別しない変数のマッチング

  1. Bashでリダイレクト演算子を使用する5つの方法

  2. Bashスクリプト(I)

  3. Bashスクリプトに.shまたは.bash拡張子を使用しますか?