Unix / Linux – Shellの置換

置換とは

shellが1つ以上の特殊文字を含む式を検出すると、置換を実行します。

実例

変数の出力値はその値に置換されます。 同時に、「\ n」は改行されます。

#!/bin/sh

a=10
echo -e "Value of a is $a \n"

以下の結果が表示されます。 ここで、-eオプションを使用すると、バックスラッシュのエスケープを解釈できます。

Value of a is 10

以下は、-eオプションが付いていないで、出力された結果です。

Value of a is 10\n

echoコマンドで以下のエスケープシーケンスが使用できます。

番号エスケープと説明
1\ バックスラッシュ
2\a アラート(BEL)
3\b バックスペース
4\C末尾の改行文字を削除する
5\Fページを変更する
6\n新規チーム
7\rキャリッジリターン
8\t横ラベル
9\v縦ラベル

-Eオプションを使用して、バックスラッシュのエスケープの解釈を無効にすることができます。(デフォルト)

-nオプションを使用して、新しい行の挿入を無効にすることができます。

コマンド置換

コマンド置換は、シェルが特定のコマンドセットを実行し、コマンドの代わりにその出力を置換するメカニズムです。

構文

コマンドが「-」に指定された時に、コマンド置換を実行します。

`command`

コマンド置換を実行する時には、一重引用符の代わりに、バッククォートを使用してください。

実例

コマンド置換は通常、コマンドの出力を変数に割り当てるために使用されます。 以下の実例は、コマンド置換を示します。

#!/bin/sh

DATE=`date`
echo "Date is $DATE"

USERS=`who | wc -l`
echo "Logged in user are $USERS"

UP=`date ; uptime`
echo "Uptime is $UP"

実行した後、以下の結果が表示されます。

Date is Thu Jul  2 03:59:57 MST 2009
Logged in user are 1
Uptime is Thu Jul  2 03:59:57 MST 2009
03:59:57 up 20 days, 14:03,  1 user,  load avg: 0.13, 0.07, 0.15

変数置換

変数置換により、Shellプログラマーは変数の状態に応じて変数の値を操作できます。

以下のテーブルには、すべての置換可能の方法を示します。

番号テーブルと説明
1$ {var} varの値を置換します。
2$ {var:-word} varがnullまたは未設定の場合は、varをwordに置換します。 varの値は変更されません。
3$ {var:= word} varがnullまたは未設定の場合、varはwordの値に設定されます。
4$ {var:?message} varがnullまたは未設定の場合、メッセージは標準エラーとして出力されます。 これにより、変数の設定が正しいかどうかを確認します。
5$ {var:+ word} VARは文字がバリアントに置換する場合、varの値を変更しません。

実例

以下のは、上記の置換のさまざまな状態を示す実例です。

#!/bin/sh

echo ${var:-"Variable is not set"}
echo "1 - Value of var is ${var}"

echo ${var:="Variable is not set"}
echo "2 - Value of var is ${var}"

unset var
echo ${var:+"This is default value"}
echo "3 - Value of var is $var"

var="Prefix"
echo ${var:+"This is default value"}
echo "4 - Value of var is $var"

echo ${var:?"Print this message"}
echo "5 - Value of var is ${var}"

実行した後、以下の結果が表示されます。

Variable is not set
1 - Value of var is
Variable is not set
2 - Value of var is Variable is not set

3 - Value of var is
This is default value
4 - Value of var is Prefix
Prefix
5 - Value of var is Prefix
Share

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です