🧙

PowerShell⇔Bash 特殊記号の対応表

2023/04/07に公開2

PowerShell(Bash)をたまに何かの機会で触ると「あの特殊文字ってPowershell(Bash)だとどう表現するんだっけ??」と思いませんか。しかも記号なのでググりにくい。
私の場合たまにShellScriptを書くと忘れていることが多々あり調べるのが億劫なので、早見できるようにBashとPowerShellの特殊文字の記法をまとめてみました。

サマリ

使用頻度の高いものをピックアップしていますが、都度都度追記していきます。
網羅的になってはいない点はあらかじめご了承ください。

  • 共通(記号)
意味 記号
変数展開 $変数名
変数の境界 ${変数名}
内部展開ありの文字列 "
内部展開なしの文字列 '
連続実行 ;
パイプライン |
コメントアウト #

-共通でない(記号)

意味 Bash PowerShell
変数宣言 declare 変数名=値 $変数名=値
配列宣言 declare -a 配列名=(値1 値2) $配列名=@(値1,値2)
配列の取り出し ${変数名[インデックス]} $変数名[インデックス]
連想配列宣言 declare -A 連想配列名=(['キー']=値) $連想配列名=@{'キー'='値'}
連想配列の取り出し ${連想配列名['キー']}
"${連想配列名["キー"]}"
$連想配列名['キー']
"$($連想配列名.キー)"
環境変数 $ $env:
コマンド置換 ``
$()
()
$()
改行コード \r\n `r`n
タブ \t `t
コマンド内改行 \ `
エスケープ \ `
変数の外出し source
.
.
連続コマンド(AND/OR) AND…&&
OR…||
なし※

※PowerShell 7 Preview.5で追加されたようです。Windows Powershell(5.x)では使えません。
https://dev.classmethod.jp/articles/powershell-7-pipeline-chain-operator/

使用例

実行環境

  • PowerShell…7.3.3

  • Bash…5.1.8

  • 変数

PowerShell
$fruit='りんご'
Bash
declare fruit='りんご'
  • 配列
PowerShell
$fruits=@('りんご','ばなな')
Bash
declare -a fruits=('りんご' 'ばなな')
  • 配列の取り出し
PowerShell
Write-Output $fruits[0]
Bash
echo ${fruits[0]}
  • 連想配列
PowerShell
$price=@{'りんご'=100;'ばなな'=200}
Bash
declare -A price=(['りんご']=100 ['ばなな']=200)
  • 連想配列の取り出し
PowerShell
Write-Output $price['りんご']
Bash
echo ${price['りんご']}
  • 環境変数
PowerShell
Write-Output $env:PATH
Bash
echo $PATH
  • コマンド置換
    ※ダブルクォートの中では()は文字列として評価されるので$()を使用します。
PowerShell
Write-Output "現在の時刻は$(Get-Date)です。"
Bash
echo "現在の時刻は`date`です。"
  • 改行コード
PowerShell
Write-Output "からころも`r`nきつつなれにし`r`nつましあれば`r`nはるばるきぬる`r`nたびをしぞおもふ (伊勢物語)`r`n"
Bash
echo -e "からころも\nきつつなれにし\nつましあれば\nはるばるきぬる\nたびをしぞおもふ (伊勢物語)"
  • タブ
PowerShell
Write-Output "[`t]"
Bash
echo -e "[\t]"
  • コマンド内改行
PowerShell
Write-Output `
	'改行できました!'
Bash
echo \
	'改行できました!'
  • エスケープ
PowerShell
Write-Output "この商品のお値段はなんと`"`$${price}`"です!!"
Bash
echo "この商品のお値段はなんと\"\$${price}\"です!!"
  • 連続コマンド(AND/OR)
PowerShell
gecho && echo 'このechoは実行しません'
gecho || echo '失敗しても実行します'
Bash
gecho && echo 'このechoは実行しません'
gecho || echo '失敗しても実行します'

まとめ

整理してみると思いのほか書き方の違う部分が多いですね。
ところで参考資料に出てきたサムネ、PowerShellとかPosh-Chanと呼ばれているようです。。。

参考資料

https://learn.microsoft.com/ja-jp/PowerShell/module/microsoft.powershell.core/about/about_operators?view=PowerShell-7.3

https://learn.microsoft.com/ja-jp/powershell/scripting/learn/deep-dives/everything-about-string-substitutions?view=PowerShell-7.3

Discussion

yamkyamk

いつも迷ってて、こういうまとめ助かります。ありがとうございます。

連想配列はよく使うので、こんな例も混ぜていただけるとありがたいです。

Bash:
"${連想配列名["キー"]}"

PowerShell:
"(連想配列名['キー'])"
または
"(連想配列名.キー)"

※PowerShell は書式というより $() で「式として評価」

kookoo

追記しました、ありがとうございます!