代替とは何ですか?
シェルは、1つ以上の特殊文字を含む式に遭遇したときに置換を実行します。
例
ここで、変数の値は置き換えられます。“\ n”は改行になります
#!/bin/sh a=10 echo -e "答えは $a \n"
次の結果が表示されます。ここで、-eオプションは、バックスラッシュエスケープの解釈を可能にします。
答えは 10
-eオプションを指定しなかった場合の結果は次のとおりです。
答えは 10\n
echoコマンドで使用できるエスケープシーケンスは次のとおりです。
S.No. | エスケープと説明 |
---|---|
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
可変置換
変数置換は、シェルプログラマがその状態に基づいて変数の値を操作できるようにします。
可能なすべての置換について、次の表があります。
S.No. | フォームと説明 |
---|---|
1 | $ {var}
varの値を代入します。 |
2 | $ {var:-word}
varがnullまたはunsetの場合、wordはvarに置き換えられます。varの値は変更されません。 |
3 | $ {var:= word}
varがnullまたはunsetの場合、varはwordの値に設定されます。 |
4 | $ {var:?message}
varがnullまたは設定されていない場合、メッセージは標準エラーに出力されます。これは、変数が正しく設定されていることを確認します。 |
5 | $ {var:+ word}
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