bashスクリプトに関するメモ
bashスクリプトに関するメモ。最近知ったものや、以前から知っていたものなど。
空のファイルを生成する
他にも方法はあるが。
: > file
グループコマンド
{}
で複数のコマンドをグループ化できる。
{
echo 1
echo 2
echo 3
}
出力がまとめられるのでファイルに出力する場合は高速化が期待できる。
: > file
echo 1 >> file
echo 2 >> file
echo 3 >> file
{
echo 1
echo 2
echo 3
} > file
for
やwhile
なども同様。
$ for i in {0..9}
> do
> echo -n $i
> done > file
$ cat file
0123456789
ヒアドキュメントでのインデント
<<-
として先頭行にタブ文字を置くとタブ文字が無視されるのでインデントできる。
cat <<-EOB > file
#!/bin/bash
ls -l
EOB
ヒアドキュメントで変数などを展開しない
区切り文字列を'
で囲む。
$ cat <<'EOB'
> $(ls)
> EOB
$(ls)
ヒアストリング
<<<
で文字列を直接標準入力に渡せる。
$ grep -o cde <<<abcdefg
cde
$ str='abcdefg'
$ grep -o cde <<<$str
cde
プロセス置換
>()
や<()
でコマンドの出力をファイルとして扱うことができる。前者は使ったことがない。
$ diff -u <(printf '%s\n%s\n' 1 2) <(printf '%s\n%s\n' 1 3)
--- /dev/fd/63 2014-12-01 01:56:08.000000000 +0900
+++ /dev/fd/62 2014-12-01 01:56:08.000000000 +0900
@@ -1,2 +1,2 @@
1
-2
+3
bashのプロセス置換機能を活用して、シェル作業やスクリプト書きを効率化するがとても参考になる。
現在実行中のシェルのバージョンを表示する
C-x C-v
と入力する。
$
GNU bash, version 3.2.53(1)-release (x86_64-apple-darwin14)
現在実行中のセッションのバージョンを表示するので、古いバージョンのシェルで起動してアップデートしたあとそのままセッションを残した状態でバージョンを確認するとバージョンが異なる場合がある。
$
GNU bash, version 3.2.53(1)-release (x86_64-apple-darwin14)
$ bash --version
GNU bash, version 3.2.53(1)-release (x86_64-apple-darwin14)
Copyright (C) 2007 Free Software Foundation, Inc.
bashはとても奥が深くて、調べるたびに新しいことを知ることが多い。