Bash

Getting Started

入門コンテンツ:

コーディング規約:

Documents

公式

非公式

プロンプトについて:

bashコマンド

Examples:

bash -n script.sh # シンタックスチェック

参考:

Syntax

配列

# 配列の生成
array=() # 空配列
array=("a" "b" "c")

# 配列の要素数
echo ${#array[@]}

# 末尾に要素追加
array+=("x")

# 先頭に追加
array=("x" "${array[@]}")

参考:

リダイレクト

Qiitaにまとめを書いた:

参考:

ヒアドキュメント

※POSIX標準ではないか。少なくともkshでは動かなさそう。

Examples:

cat << EOS > cat.out
foo
  bar
    baz
EOS

BODY="$(cat << EOS
Dear Ken,

I'm so happy to write this message.
I'll be back soon!
EOS
)"

ヒアドキュメントは文字列リテラルではなく、標準入力らしい。

参考:

正規表現

POSIXか、EREなのだと思う。

SYNOPSIS:

if [[ "$str" =~ ^ba*r$ ]]; then
  echo match
end

## マッチしないことの検査
if [[ ! "$str" =~ ^ba*r$ ]]; then
  echo not match
end

関連項目:

参考:

ANSI-C Quoting

https://tiswww.case.edu/php/chet/bash/bashref.html#ANSI_002dC-Quoting

$'string' 形式のもの。ユニコードとかエスケープシーケンスで使える。

Examples:

echo $'\e[031mThis text will be colored Red.\e[0m'
echo $'\U25c0'

Built-ins

help

ビルトインコマンドの説明を表示する。

Examples:

# helpコマンド自身のヘルプを表示
help help
# 擬似man pageモード
help -m unset

参考:

history

https://tiswww.case.edu/php/chet/bash/bashref.html#Bash-History-Builtins

Examples:

# 10件表示
history 10

Tips:

  • シェル変数 HISTTIMEFORMAT をstrftime書式で設定しておくとタイムスタンプを記録してくれる。 また、表示時にその書式でタイムスタンプを表示してくれる

参考:

Spec

その他の仕様など。

配列はexportできない

Re: export does not work on array

これは2006年のメールなのだけど、2020-05-23のmacOS + bash v5.0.17でも駄目だった。

サブシェルでは見えるんだけど、子プロセスとして起動したスクリプトからだと見えなかった。

参考:

How-to

プロンプト(PS1)の変更

PS1 変数を設定する。

Examples:

PS1="\[\e[1;34m\][\u@\h \W]\\$ \[\e[m\]"
特殊文字内容
\u現在のユーザ名
\hホスト名(ドメイン部除く)
\wカレントディレクトリ(ホームディレクトリからの絶対パス)

参考(カスタマイズしたくなったときに見るページ):


Cookbooks

スクリプティングのための応用的なコードスニペット集っぽいもの。 基本的な文法機能の解説は別に書く。