bash変数周りのメモ

July 30, 2021

シェル変数

||0|| プログラム名 ||1 ~ 9|| 第 1 ~9引数 ||@|| 全ての引数。”$@” としたときは “$1” “$2” “$3”… に等しい。 ||*|| 全ての引数。”$*” としたときは “$1 $2 $3…” に等しい。 ||#|| 引数の数 ||?|| 直前に実行したプログラムの終了コード。 ||RANDOM|| ランダムな数字。0~32767 が帰ってくる模様。 ||$|| プロセス ID

Geek なぺーじ:10 の UNIX 小技

変数と「"」の組み合わせは慎重に

特別な理由が無い限り、変数は「"」で囲う方が良いでしょう。
もし、変数名の直後に文字を使いたいのであれば、変数名を「{}」で囲いましょう。
これを忘れてしまうと、別の変数名として扱われてしまいます。
意図しない別の変数名になってしまった場合、大抵はnull値になるでしょう。

$ ls tmp/
a b
$ VAR="tmp/*"
$ echo $VAR
tmp/a tmp/b
$ echo "$VAR"
tmp/*
$ echo $VARa

$ echo "$VARa"

$ echo "${VAR}a"
tmp/*a
$ echo ${VAR}a
tmp/a
$

コマンドのグループ化

Geek なぺーじ:10 の UNIX 小技

コマンドをグループ分けする

大抵のシェルには、コマンドをグループ分けして実行する機能を持っています。
一般的には、subshellで行う方法と、現在実行しているshellで行う2通りの方法があります。

subshell

subshellを使う方法は、環境変数を定義しなおしたい場合に有効です。
subshellで環境変数を変更しても、現在実行中のshellが保持する環境変数は維持されます。

$ ( cd tmp/a/b/c/ || mkdir -p tmp/a/b/c && \
> VAR=$PWD; cd ~; tar xvf -C $VAR archive.tar ) \
> | mailx admin -S "Archive contents"

現在のshell

「{}」の前後にスペースが入るように注意しましょう。
スペースを入れないと正しく動作しないかも知れません。

また、「}」の前に来る最後のコマンドの後に「;」を入れるのを忘れないようにしましょう。

$ { cp ${VAR}a . && chown -R guest.guest a && \
> tar cvf newarchive.tar a; } | mailx admin -S "New archive"

Profile picture

Written by tin-machine 技術関連のメモ Twitter