UNIX/コマンド/シェル・シェル組み込み/zsh


Table of Contents

[ -f /bin/zsh ] && SHELL=/bin/zsh
[ -f /bin/zsh ] && exec /bin/zsh -l

checking if tcsetpgrp() actually works... error~
configure: error: unexpected return status

./configure --enable-multibyte --prefix=

% hello="Hello, "
% echo $hello
Hello, 
% world="World\!"
% echo $hello$world
Hello, World!
% printf "%s\n" $hello
Hello, 
% print $world
World!
% echo "$hello"
Hello, 
% echo '$world\n'
$world

% echo -n "$hello\n"
Hello, 
%
% unset hello
% echo $hello

%
% hello=Hello
% echo $hello
Hello
% zsh
% echo $hello

% hello="sub Hello"
% echo $hello
sub Hello
% exit
% echo $hello
Hello
%
% export shell_env="shell env val"
% echo $shell_env
shell env val
% zsh
% echo $shell_env
shell env val
% unset shell_env
% echo $shell_env

% exit
% echo $shell_env
shell env val

% arr=(aa "bb" 22 "44")
% echo $arr[1]
aa
% echo $((arr[4]*2))
88
% echo $#arr
4
$ echo $arr[*]
aa bb 22 44
% echo $arr[2,4]
bb 22 44
$ echo $arr[-2]
22
$ echo $arr[-2,4]
22 44
$ echo $arr[$#arr]
44
+ 、- 、* 、/ 、% (剰余)、++ (インクリメント)、-- (デクリメント)、** (冪乗)
& (ビット単位の論理積)、| (ビット単位の論理和)、~ (ビット単位の論理否定)、^ (ビット単位の排他的論理和)
! (論理否定)、, (連続評価)、&& (論理積)、|| (論理和)
< 、> 、<= 、>= 、!=、==
% echo $((11))
11
% echo $((11!=3))
1
% echo $((11==3))
0
% n=5; echo $((n))
5
% 
% zmodload zsh/mathfunc
% echo $((1/2))
0
% echo $((1/2.0))
0.5
% printf "%.3f\n" $((1/3.0))
0.333
% printf "%.9f\n" $(( 4*atan(1) ))
3.141592654
% printf "%.9f\n" $(( log1p(1) ))
0.693147181

for name ... [ in word ... ] term do list done
% for i j in {1..7} ; do ;
for% echo $i $j
for% ; done
1 2
3 4
5 6
7

% ls 
tes1 tes2 tes3
% for file in * ; do ;
for% echo $file
for% ; done
tes1
tes2
tes3
% for i; do ;
for% echo 1 2 3 4
for% ; done
%
% for file in *
for% do
for% echo $file
for% done
tes1
tes2
tes3

for (( [expr1] ; [expr2] ; [expr3] )) do list done
% for ((i = 0; i < 5; i++)); do ;
for% echo $i
for% ;done 
0
1
2
3
4
if list_1 then list_2 [ elif list_3 then list_4 ] ... [ else list_n ] fi

% n=4
% if [ $n < 4 ] ; then ;
then% echo $n
then% ; fi
zsh: no such file or directory: 4
% n=1
% if [ $n -lt 4 ] ; then ;
then% echo $n
then% ; fi
1

% mkdir testdir && cd !!:$
% touch file1 file2 && ls
. .. file1 file2
% if [ -e file1 -a -e file2 ] ; then ;
then% echo "true\n"
then% ; else ;
else% echo "false\n"
else% ; fi
true

% if [ -e file1 -o -e file3 ] ; then ;
then% echo "true\n"
then% ; else ;
else% echo "false\n"
else% ; fi
true

% if [ -e file1 -a -e file3 ] ; then ;
then% echo "true\n"
then% ; else ;
else% echo "false\n"
else% ; fi
false

% if [ -e file1 -a ! -e file3 ] ; then ;
then% echo "true\n"
then% ; else ;
else% echo "false\n"
else% ; fi
false

% zsh
% n=2
% if [[ $n < 4 ]] ; then ;
then% echo $n
then% ; fi
2
% if [[ $n -lt 4 ]] ; then ;
then% echo $n
then% ; fi
2
% if [[ -e file1 && -e file2 ]] ; then ;
then% echo "true\n"
then% ; else ;
else% echo "false\n"
else% ; fi
true

% if [[ -e file1 || -e file3 ]] ; then ;
then% echo "true\n"
then% ; else ;
else% echo "false\n"
else% ; fi
true

% sh
$ n=2
$ if [[ $number -le 4 ]] ; then
> echo $n
> fi
sh: [[: not found
$ if [ $number -le 4 ] ; then
> echo $n
> fi
2

#!/bin/zsh

setopt prompt_subst

if [[ $((RANDOM%2)) == 0 ]] ; then ;
  exit 0
; else ;
  exit 1
; fi
% n=4
% repeat 10; do ;
repeat% if
repeat if% if [[ $n -le 4 ]] ; then ;
repeat if then% ./genExit.sh
repeat if% ; fi
repeat if% ; then ;
repeat then% echo "exit 0"
repeat then% ; else ;
repeat else% echo "exit 1"
repeat else% ; fi
repeat ; done
exit 0
exit 1
exit 1
exit 0
exit 1
exit 0
exit 0
exit 0
exit 1
exit 0

repeat word do list done
% repeat 10; do;
repeat% echo -n "`date`\r"
repeat% sleep 1
repeat% ; done
select name [ in word ... term ] do list done
% select number in {1..5} ; do ;
select% if [[ 1 -le $number && $number -le 5]] ; then ;
select then% echo $number
select then% ; else ;
select else% echo "無効な選択です"
select else% ; fi ;
select% done
1) 1  2) 2  3) 3  4) 4  5) 5
?# 1
1
?# 6
無効な選択です
sleep [number[smhd]...]
% for i {1..100}; do ;
for% echo -n '\a'
for% sleep $((60/100.0))
for% ; done
while list do list done
% echo {1..4}
1 2 3 4

yes [string...]
% yes e
e
e
e^C
% for i in {1..9} ; do ;
for% if [[ $((i%2)) == 0 ]] ; then;
for then% echo $i
for then% ; fi
for% ; done
2
4
6
8
% <file1 >file2

% <file1 <file2 >file3 >file4 >file5

% autoload -U compinit
% compinit
% autolaod -U tetris
% zle -N tetirs
% ESC-x 
execute: tetirs

-U エイリアス展開をしません。
-X 関数名を指定せずに関数の中で使われます。関数の定義を同じ名前のオートロードの関数で上書きします。
+X 指定された関数が未定義の時にのみ読み込みます。unfunction コマンドとともに使われることがあります。
-k ksh 風の autoload です。
-t デバッグ時のトレース。
-w 関数がすでにコンパイル済みの時に使います。
-z zsh 風の autolaod です。
% ~/dir1/dir2/bin
% ~root/bin
% /
Completing directory stack
0 -- /home/student/sxxxxxxx/dir1/dir2/bin
1 -- /root/bin
2 -- /

size     -- List section sizes and total size.
spline   -- Interpolate between points in datasets.
strings  -- List printable strings from files.
strip    -- Discard symbols.
zsh: you have running jobs.
zsh: warning: X jobs SIGHUPed
% gedit &
% thunderbird &
% firefox &
% file-roller &|
% acroread &!
% jobs
[1]    running    gedit
[2]  - running    tunderbird
[3]  + running    firefox

% jobs
[1]    running    gedit
[2]  - running    tunderbird
[3]  + running    firefox
% disown %firefox
% jobs
[1]  - running    gedit
[2]  + running    tunderbird
% disown %[<tab>]
Completing job
%1  -- gedit
%2  -- thunderbird
% %thunderbird &!
% %1 &|
% jobs
%
-d ジョブを起動したときのディレクトリの出力
-l プロセス ID の出力
-p プロセスグループのプロセス ID を出力
-r running のジョブのみの出力
-s stopped のジョブのみ

% whatis ESC-h
whatis is /usr/bin/whatis

...(マニュアルの内容)...

% whatis

% ls -l
drwxr-xr-x  3 s1170232 student 4.0K Feb  9 22:28 .
drwxr-xr-x 68 s1170232 student 8.0K Feb  9 22:34 ..
drwxr-xr-x  2 s1170232 student 4.0K Feb  9 22:26 dir1
-r--------  1 s1170232 student    0 Feb  9 22:25 file1
--w-------  1 s1170232 student    0 Feb  9 22:25 file2
---s------  1 s1170232 student    0 Feb  9 22:25 file3
-rwx------  1 s1170232 student    0 Feb  9 22:25 file4
lrwxrwxrwx  1 s1170232 student   22 Feb  9 22:28 link1 -> /home/student/s1170232
% ls -l {file*,link1}(f/u+r/,@)
-r-------- 1 s1170232 student  0 Feb  9 22:25 file1
-rwx------ 1 s1170232 student  0 Feb  9 22:25 file4
lrwxrwxrwx 1 s1170232 student 22 Feb  9 22:28 link1 -> /home/student/s1170232
% rm {file*,link1}(r,s)
% $ ls -l
drwxr-xr-x  3 s1170232 student 4.0K Feb  9 22:51 .
drwxr-xr-x 68 s1170232 student 8.0K Feb  9 22:51 ..
drwxr-xr-x  2 s1170232 student 4.0K Feb  9 22:26 dir1
--w-------  1 s1170232 student    0 Feb  9 22:25 file2
(/) ディレクトリである
(.) 通常ファイルである
(@) シンボリックリンクである
(*) 実行ファイルである
(r) 属性に u+r がある
(w) 属性に u+w がある
(x) 属性に u+x がある
(A) 属性に g+r がある
(I) 属性に g+w がある
(E) 属性に g+x がある
(R) 属性に o+r がある
(W) 属性に o+w がある
(X) 属性に o+x がある
(s) SetUID ビットが与えられている 
(S) SetGID ビットが与えられている
(t) Sticky ビットが与えられている
(f) 8進数とともに用いられる場合、f に続けて =、+、-、?を使います。
    = では、指定された属性に一致するもの、+ はその属性があるもの、 
    - ではその属性がないもの、? はどの権限でもよい(例: (f+1?5))。
    = のみ省略可能です(例: (f100))。
    u+r 等で使われる場合、//内に書きます(例: (f/u+r,o-x/))。
(a-X) アクセス日時が X 日前より後である
      a と -X の間に、s をつけると X 秒、m をつけると X 分、h をつけると X 時間、
      w をつけると X 週間、M をつけると X ヶ月になります。
(a+X) アクセス日時が X 日前より過去である
      a と +X の間には、-X の時と同じ文字が指定できる。
(m-X) 修正日時が X 日前より後である
      a と同様、+X もある。 
(L-X) X バイト未満のファイル
      L と -X の間に k をつけるとキロバイト、m をつけるとメガバイトになります。
(L+X) X バイトより大きいファイル

◆ ^ に続いた修飾子は意味が反対になります。また、ターミナル上で a などと打つと
     補完の一覧が出てくるので、そこでも確認しつつ入力が可能です。

% ./**/*(.{Lm+10,aM+1})

xrea