目次
PowerShellのechoとは?
PowerShellはWindows10に標準で入っている多機能なシェルスクリプトです。Windowsには昔からDOS窓と言われるコマンドプロンプトがあって、その機能を使用する実行形式ファイルをバッチファイルと言いますが、PowerShellはそれが大幅に強化されています。
PowerShellのechoはコンソールに文字を表示する機能です。文字表示は基本と言えるので、しっかりマスターしましょう。
echoを使ってみる
PowerShellを使うには、スタートメニューのWindows PowerShellのフォルダにあるWindows PowerShellを実行します。するとコンソールのウィンドウが立ち上がります。早速echoを使ってみましょう。
echo あいうえお
この様に入力してEnterキーを押すと、コンソールに
あいうえお
と表示されます。echoを使うことが出来ました。
‘や”で囲っても同じ結果になる
以下のように出力する文字列を’や”で囲って入力しても、結果は同じく「あいうえお」になります。
echo ‘あいうえお’
echo “あいうえお”
しかし、実はこの2つには違いがあります。それはエスケープシーケンスが有効になるかどうかです。その違いを説明する前に、PowerShellにおけるエスケープシーケンスを説明しましょう。
PowerShellのエスケープシーケンス
PowerShellに以下のように入力してみましょう。
echo あいうnえお
結果は以下のようになります。
あいう
えお
nがエスケープシーケンスです。
はキーボードの@キーをShiftキーを押しながら入力します。
nはラインフィードと呼ばれ、改行をするという効果があります。
PowerShellのエスケープシーケンスは他には以下のようなものがあります。
r キャリッジリターン。行頭に戻る。
t タブ。
a 警告。Windows10では音が鳴る。
‘ シングルクォーテーション。
" タブルクォーテーション。
バッククォーテーション。
0 Null。
‘と”の違い
行頭に戻るキャリッジリターンは無意味に感じるかもしれませんが、もともとキャリッジリターンとラインフィードはタイプライターの動きを再現する名残で残っています。ラインフィードのnだけ知っていれば良いでしょう。
話を戻して、文字列を’で囲うのと、"で囲うのとの違いを説明しましょう。これはエスケープシーケンスを記述するとわかります。以下の実行結果は、
echo 'あいう
nえお’
以下になります。
あいうnえお
'と"の関係
'で囲うとエスケープシーケンスが機能しないのです。なお以下のように"の場合は、
echo "あいう
nえお”
以下のように機能するので、”は囲まない場合と同じということになります。
あいう
えお
ちなみに’を”で囲った場合は、
echo “‘あいうえお'”
結果は以下のように’をエスケープしなくてもそのまま出ます。
‘あいうえお’
“を’で囲った場合は、
echo ‘”あいうえお”‘
結果は以下のように”がエスケープ不要になります。
“あいうえお”
変数の展開について
次は変数の展開についてです。echoで表示する時、文字列に変数をつなげることができます。
$ue = ‘うえ’
echo “あい$ue お”
結果は
あいうえ お
になります。以下のように’を使った場合は、
echo ‘あい$ue お’
結果は以下になります。エスケープシーケンスの時と同じで、’は変数の内容が展開されずそのまま表示されます。
あい$ue お
なおechoで文字列に変数をつなげる場合、変数の後ろにスペースが必要です。そのため今回のケースではどうしても「え」と「お」の間にスペースが入ってしまいます。
変数の後ろのスペースは除去できない
スペースを無くしたいならば、例えば以下のようにするしかないでしょう。根本的な解決にはなってないのですが。
$ue = ‘うえ’
$ueo = $ue + ‘お’
echo “あい$ueo”
結果は以下になります。
あいうえお
なお以下のように、”も’も使用しない場合は、
echo あい$ue お
以下のようになります。スペースが改行扱いになるということですね。
あいうえ
お
PowerShellにechoというコマンドは無い
ここまでechoを使用してきましたが、実はPowerShellにはechoというコマンドはありません。エイリアスと言う機能により、echoを呼ぶと別のコマンドが呼び出されていたのです。それを知るには、PowerShellのコンソールで、
Get-Alias
と入力します。するとエイリアスの一覧が表示されますが、その中に、
Alias echo -> Write-Output
があります。echoと入力すると、Write-Outputというコマンドが呼び出されていたのです。このようにしている理由は、コマンドプロンプトなどの古いシェルでは文字表示コマンドはechoが一般的だったので、それに慣れている人がすぐ使えるようにという配慮です。
Write-HostとWrite-Outputの違いは?
echoはWrite-Outputであることがわかりましたが、PowerShellでコンソールに文字を表示する場合、Write-Hostを使う方が多くなっています。理由はWrite-HostはのHostはコンソールを意味していて、それに文字を表示するための専用のコマンドだからです。
Write-Outputは|のパイプラインで別のコマンドが続く場合は、コンソールではなくそちらに出力します。Write-Hostは続きの|があってもコンソールに出力します。ただしWrite-Outputも|が無ければコンソールに出力するので、その場合はWrite-Hostと変わりません。ここまでの例は|が無いのでコンソールに表示されていました。
違いのわかりやすい例
以下はecho(Write-Output)とWrite-Hostの違いの分かりやすい例です。
echo @(‘あ’,’い’,’う’,’え’,’お’) | Select-String う
これの実行結果は以下になります。echoが配列を出力してそれをパイプラインでSelect-Stringに渡して、そちらで「う」を選択しています。
う
ところが以下の結果は、
Write-Host @(‘あ’,’い’,’う’,’え’,’お’) | Select-String う
以下になります。Write-Hostはコンソール出力専用のコマンドのため、パイプラインに出力を渡すことができないということです。
あ い う え お
echoでファイル出力をする
echo(Write-Output)はWrite-Hostと違いコンソール以外にも出力できるので、ファイル出力も簡単にできます。以下はその例です。
echo ‘テスト’ | Out-File -FilePath ‘c:\test\test.txt’ -append
echoの出力をパイプラインでOut-Fileコマンドに渡します。Out-Fileは-FilePathで指定されたファイルに出力します。-appendを付けると追記モードなので、書き足されます。ログなどにとても便利に使えます。
リダイレクトならもっと簡単
上のようなファイル出力は、リダイレクトを使えばもっと簡単に書けます。以下で上と同じことが出来ます。
echo ‘テスト’ >> c:\test\test.txt
不等号の>>がリダイレクトです。>が2つあると追記モードで、1つだと上書きします。ファイル出力処理はC#やJavaやVBAだともっと多くのコードが必要なのですが、PowerShellならとても簡単です。
echoを活用してPowerShellを使いこなそう
PowerShellのechoについて解説しましたがいかがでしたでしょうか。echoはエイリアスで本来のコマンドはWrite-Outputなので、そちらを使う方が良いでしょう。
インフラエンジニア専門の転職サイト「FEnetインフラ」
FEnetインフラはサービス開始から10年以上『エンジニアの生涯価値の向上』をミッションに掲げ、多くのエンジニアの就業を支援してきました。
転職をお考えの方は気軽にご登録・ご相談ください。