シェルスクリプト総合 その24©5ch.net
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。 転載ダメ©2ch.net
2014/11/11(火) 00:54:03.43□お約束
・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。
bash/zsh/ksh/ashなどに依存する場合は明示しましょう。
Linuxユーザは/bin/shの正体がbashまたはdashなので特に注意。
FreeBSDユーザは/bin/shの正体がashなので注意。
v7 shに一番近くて、現役のshは、OpenSolaris由来のheirloom sh。
http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/cmd/sh/
http://heirloom.sourceforge.net/sh.html
・csh/tcshのシェルスクリプトは推奨されません。
(理由は「csh-whynot」でググれ)
・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。
manや参考リンクを見ましょう。
aproposないしはman -kでそれらしい単語による簡単な検索もできます。
・シェルで使えるワイルドカード等は正規表現ではありません。
正規表現の話題はスレ違い(正規表現スレへ)
・シェルスクリプトのことをシェルってゆーな
□初心者へのアドバイス:
・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
awkまたはperlの方が適した処理にはそちらを使いましょう。
・知らないコマンドが出てきたらmanを引きましょう。
・思い通りに動かないときは、まずは sh -x でトレースしましょう。
□回答者への注意事項:
・シェルスクリプトでの処理方法を質問しているのに、よくわからずに
「そういうのはperl使いましょう」と回答するのはやめましょう。
安易にperlに逃げずにシェルスクリプトで処理するのが頭のいいやり方。
前スレ
シェルスクリプト総合 その23
http://peace.2ch.net/test/read.cgi/unix/1404204950/
0615名無しさん@お腹いっぱい。
2015/05/23(土) 07:23:22.410616名無しさん@お腹いっぱい。
2015/05/23(土) 07:57:47.770617名無しさん@お腹いっぱい。
2015/05/23(土) 09:04:23.16自分では回答しているつもりになっている半可通が居るからじゃないの?
>>525とかは回答なんだろうけど、回答者からは質問者だと錯覚されるから回答がこなくなる。
0618名無しさん@お腹いっぱい。
2015/05/23(土) 09:53:03.52相当な意気込みで実装したいらしいな
いじってやるからまた書き込みなよ
0619名無しさん@お腹いっぱい。
2015/05/23(土) 11:20:44.870620名無しさん@お腹いっぱい。
2015/05/23(土) 11:26:14.780621名無しさん@お腹いっぱい。
2015/05/23(土) 11:31:28.73それが正当な対価だろう。
0622名無しさん@お腹いっぱい。
2015/05/23(土) 12:58:15.22「できましたー!!」←これが対価なの?
馬鹿にしてるの?
0623名無しさん@お腹いっぱい。
2015/05/23(土) 14:47:50.850624名無しさん@お腹いっぱい。
2015/05/23(土) 14:55:03.12シェルスクリプトじゃないとダメです。
繰り返しますがわかる方のみ回答してください。
わからない方は技術力がないと同一ですので(認めたくないでしょうけど)、
素直に黙るのが賢明です。
0625名無しさん@お腹いっぱい。
2015/05/23(土) 15:29:15.99極小ならアセンブラだろ
0626名無しさん@お腹いっぱい。
2015/05/23(土) 15:32:43.77まあこれぶっちゃけ200万レベルの仕事だね
0627名無しさん@お腹いっぱい。
2015/05/23(土) 15:50:06.27繰り返しますがわかる方のみ回答してください。
0628名無しさん@お腹いっぱい。
2015/05/23(土) 15:58:55.20シェルスクリプトで暗号通貨のウォレットでも作れば?
0629名無しさん@お腹いっぱい。
2015/05/23(土) 16:04:25.94すみませんが質問にだけ回答してください。
0630名無しさん@お腹いっぱい。
2015/05/23(土) 16:39:09.770631名無しさん@お腹いっぱい。
2015/05/23(土) 16:52:36.760632名無しさん@お腹いっぱい。
2015/05/23(土) 17:05:15.19回答者以外はご遠慮下さい。
0633名無しさん@お腹いっぱい。
2015/05/23(土) 17:07:20.51趣味で遊んでるアナタ方とは違うんです。
0634名無しさん@お腹いっぱい。
2015/05/23(土) 17:09:47.010635名無しさん@お腹いっぱい。
2015/05/23(土) 17:43:32.850636名無しさん@お腹いっぱい。
2015/05/23(土) 17:56:45.030637名無しさん@お腹いっぱい。
2015/05/23(土) 18:22:50.650638名無しさん@お腹いっぱい。
2015/05/23(土) 18:27:23.08仕事=力×距離
ネタぐらい正しく書こうね
0639名無しさん@お腹いっぱい。
2015/05/23(土) 18:57:31.97仕事=速度²×質量
だろ
0640名無しさん@お腹いっぱい。
2015/05/23(土) 19:02:04.07仕事=電圧×電流×時間
0641名無しさん@お腹いっぱい。
2015/05/24(日) 08:36:07.430642名無しさん@お腹いっぱい。
2015/05/24(日) 09:10:55.860643名無しさん@お腹いっぱい。
2015/05/24(日) 09:16:37.720644名無しさん@お腹いっぱい。
2015/05/24(日) 09:43:16.720645名無しさん@お腹いっぱい。
2015/05/24(日) 11:40:16.08もういいんじゃない?
0646名無しさん@お腹いっぱい。
2015/05/24(日) 11:47:41.070647名無しさん@お腹いっぱい。
2015/05/24(日) 13:06:10.390648名無しさん@お腹いっぱい。
2015/05/24(日) 13:18:01.71趣味で遊んでるアナタ方とは違うんです。
0649名無しさん@お腹いっぱい。
2015/05/24(日) 13:29:57.130650名無しさん@お腹いっぱい。
2015/05/24(日) 18:19:02.96cd //
ってやったら、エラーにならずに、pwdが//になったw
どこにいたんだ?ww
0651名無しさん@お腹いっぱい。
2015/05/24(日) 18:24:05.92そんなとこにも移動できるのか
0652名無しさん@お腹いっぱい。
2015/05/24(日) 18:58:32.27bashの仕様です。今ごろ気が付いたの?
0653名無しさん@お腹いっぱい。
2015/05/24(日) 21:43:39.350654名無しさん@お腹いっぱい。
2015/05/25(月) 12:23:11.70というよりは、POSIX かな
http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html
3.267 Pathname
Multiple successive <slash> characters are considered to be the same as one <slash>,
except for the case of exactly two leading <slash> characters.
4.12 Pathname Resolution
If a pathname begins with two successive <slash> characters, the first component following
the leading <slash> characters may be interpreted in an implementation-defined manner,
although more than two leading <slash> characters shall be treated as a single <slash>
character.
0655名無しさん@お腹いっぱい。
2015/05/25(月) 12:36:39.430656名無しさん@お腹いっぱい。
2015/05/25(月) 14:37:48.450657名無しさん@お腹いっぱい。
2015/05/25(月) 16:59:21.87pwdで//が二つ出るのはbashやdashの仕様だよ。
zsh rc tclsh tcshどれも/だよ。
0658名無しさん@お腹いっぱい。
2015/05/25(月) 19:39:52.690659名無しさん@お腹いっぱい。
2015/05/25(月) 20:31:48.30コマンドライン引数の数字を順番に四則演算するシェルプログラミングを
作りたいのですが、うまくいきません。
演算の順番は+(加算)−(減算)*(乗算)/(除算)です。
#!/bin/sh
total=0
a=("$@")
n=${#a[@]}
n=$((n - 1))
while [ $n -ge 0];
do
total=$((a[$n] + $total))
n=$((n-1))
done
echo "total = $total"
自分でできたのはコマンド引数を加算のみ繰り返す処理です。
もしよい解決方法がおありでしたらご教授お願いします。
0660名無しさん@お腹いっぱい。
2015/05/25(月) 21:12:27.930661659
2015/05/25(月) 21:36:30.45教本に応えが載ってなくて、序盤のページで行き詰ってしまいました。
0662名無しさん@お腹いっぱい。
2015/05/25(月) 21:46:27.07total=0
r=0
until test $#@ -eq 0
do
case $(( r % 4 == 0 ? 1 : (r + 3) % 4 == 0 ? 2 : (r + 2) % 2 == 0 ? 3 : 4 )) in
1) total=$(( total + $1 ));;
2) total=$(( total - $1 ));;
3) total=$(( total * $1 ));;
4) total=$(( total / $1 ));;
esac
shift
(( ++r ))
done
0663名無しさん@お腹いっぱい。
2015/05/25(月) 21:53:31.12r=0
until test $# -eq 0
do
case $(( r % 4 == 0 ? 1 : (r + 3) % 4 == 0 ? 2 : (r + 2) % 2 == 0 ? 3 : 4 )) in
1) total=$(( total + $1 ));;
2) total=$(( total - $1 ));;
3) total=$(( total * $1 ));;
4) total=$(( total / $1 ));;
esac
shift
(( ++r ))
done
0664名無しさん@お腹いっぱい。
2015/05/25(月) 21:55:32.99for a b c in 1 2 3
do
echo $a $b $c
done
みたいな処理もできる。
0665名無しさん@お腹いっぱい。
2015/05/25(月) 22:08:26.160666名無しさん@お腹いっぱい。
2015/05/25(月) 22:21:07.68baseの後に何が書いてあるのか分らない時は
三項演算子というのを調べると良い。
0667名無しさん@お腹いっぱい。
2015/05/25(月) 22:21:52.930668名無しさん@お腹いっぱい。
2015/05/25(月) 22:37:26.67echo "total = $total"
0669名無しさん@お腹いっぱい。
2015/05/25(月) 23:22:22.44どれだけ偉いんだって話だよな。
0670名無しさん@お腹いっぱい。
2015/05/26(火) 01:08:45.37まあawkでいいような気もするけど。
0671659
2015/05/26(火) 06:28:38.160672名無しさん@お腹いっぱい。
2015/05/26(火) 14:02:41.07PROMPT_COMMANDの設定について教えて下さい。
ターミナルのタイトルバーに現在のディレクトリ名"だけ"を表示したいのですが、
プロンプトの設定でやる
PS1=\w
のような \w がPROMPT_COMMANDの設定では使えないんですね?
どうやったらいいのでしょうか?
0673名無しさん@お腹いっぱい。
2015/05/26(火) 15:34:18.870674名無しさん@お腹いっぱい。
2015/05/26(火) 15:43:42.530675名無しさん@お腹いっぱい。
2015/05/26(火) 15:53:38.10PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD/$HOME/~}\007"'
PROMPT_COMMAND='echo -ne "\033]0;${PWD/$HOME/~}\007"'
0676名無しさん@お腹いっぱい。
2015/05/26(火) 20:32:22.47ごめん。三項演算子に間違いがあった。
(r + 2) % 2 == 0 ? 3 : 4 )) in じゃなくて
(r + 2) % 4 == 0 ? 3 : 4 )) in だった。
以下楽しくなって、もう一つ書いといた。zshでしか動かないけれど。
a=(+ - \* /)
b ()
{
(( $# == 1 )) || b $@[1,-2]
total=$(( total $a[$(( ($# + 3) % 4 == 0 ? 1 : ($# + 2) % 4 == 0 ? 2 : ($# + 1) % 4 == 0 ? 3 : 4 ))] $@[-1] ))
echo $total
}
b $@
じゃあ勉強頑張って。
0677659
2015/05/26(火) 21:00:09.14sh、zsh、bashの違いが何やら…
0678名無しさん@お腹いっぱい。
2015/05/26(火) 22:22:51.71そんなあなたにbusybox
0679名無しさん@お腹いっぱい。
2015/05/27(水) 08:32:10.49と思う。だからbashとzshは配列の扱いなど雑多な違いがある。以下昨日のbash版。
たぶんもっと簡素に書けるのだろうけど私も全然詳しくない。
a=(+ - \* /)
b ()
{
declare -a c=( $@ )
(( $# == 1 )) || b $( echo ${c[@]} |cut -d ' ' -f -$(( $# - 1 )) )
total=$(( total ${a[$(( ($# + 3) % 4 == 0 ? 0 : ($# + 2) % 4 == 0 ? 1 : ($# + 1) % 4 == 0 ? 2 : 3 ))]} ${c[$# - 1]} ))
echo $total
}
b $@
以下みたいな書き方も簡易な条件文。何が起こるのかは(( 1 ))した後にecho $?とかして
値を確認できる。c言語は0が偽だけどshellだと0が真なので注意。cでreturnで0返すでしょ。
さらに(( 0 ))などは、echo $?した時に0として返っていない事に注目。
(( 1 )) && echo true
(( 0 )) || echo true
自ら自らを呼ぶ、再帰関数は調べればすぐ出てくる。
declareは、再帰関数ゆえ、変数名が同じになってしまうから、関数を呼んだ側の変数の値を、
呼ばれた側が変える事が無いようにしている。ローカル変数とか、スコープとか調べると出てくる。
0680名無しさん@お腹いっぱい。
2015/05/27(水) 10:46:37.27コマンドライン引数で指定されたキーワードに一致する部分を持つ、カレントディレクトリ配下のファイルをそのディレクトリ階層をそのままにコピーしたいのですが、何かよい方法はありますでしょうか。
何かよい方法はありますでしょうか。
実行環境はCentOSをTera Term とSSH接続している状態です。
実行例として
[user@portal ~]$ ./sample.sh A copyTo
第1引数はキーワード、第2引数はコピー先のディレクトリ
これでコピーができたことをTera Term上で確認できることが望ましいです。
0681名無しさん@お腹いっぱい。
2015/05/27(水) 11:05:38.310682名無しさん@お腹いっぱい。
2015/05/27(水) 13:08:06.76#!/bin/sh
find . -name "*$1*" | cpio -oc | (cd "$2" && cpio -ivdc)
0683名無しさん@お腹いっぱい。
2015/05/27(水) 13:41:16.73#!/bin/sh
cp -Rv ["$1"] "$2"
>>682はビット演算子使っててよくわからないですが、目的の動作は確認致しました!
ありがとうございます!
0684名無しさん@お腹いっぱい。
2015/05/27(水) 16:04:06.520685名無しさん@お腹いっぱい。
2015/05/28(木) 10:32:09.00第1 + 第2 - 第3 * 第4 / 第5 + 第6 - …
って処理が正しい
0686名無しさん@お腹いっぱい。
2015/05/28(木) 12:07:05.77total=$1; shift
a=(+ - \* /)
b ()
{
(( $# == 1 )) || b $@[1,-2]
total=$(( total $a[$(( ($# + 3) % 4 == 0 ? 1 : ($# + 2) % 4 == 0 ? 2 : ($# + 1) % 4 == 0 ? 3 : 4 ))] $@[-1] ))
echo $total
}
b $@
0687名無しさん@お腹いっぱい。
2015/05/28(木) 12:23:47.19まぁ本人じゃないだろうし引かせてもらおう。
0688名無しさん@お腹いっぱい。
2015/05/28(木) 12:25:16.28total=$1; shift
だけでいいんじゃないかな。急ぎなので、確認して無いけど。
0689名無しさん@お腹いっぱい。
2015/05/28(木) 12:32:06.050690名無しさん@お腹いっぱい。
2015/05/28(木) 12:32:46.85自分も、参考までに考えておいた
初期値は 0、引数の数は不定で、加算、減算、乗算、除算を繰り返すと解釈した
#! /bin/sh -x
while
total=$(
echo "( ${total:-0} ${1:++ $1} ${2:+- $2} ) ${3:+* $3} ${4:+/ $4}" | bc
)
[ 4 -lt $# ] && shift 4
do :
done
echo "ANSWER: ${total}"
exit
#! /bin/sh -x
while [ 0 -lt $# ]
do
total=$(
echo "( ${total:-0} + ${1:- 0} - ${2:- 0} ) * ${3:- 1} / ${4:- 1}" | bc
)
shift $(( $# > 4 ? 4 : $# ))
done
echo "ANSWER: ${total:-0}"
exit
0691名無しさん@お腹いっぱい。
2015/05/28(木) 12:35:03.520692名無しさん@お腹いっぱい。
2015/05/28(木) 18:17:15.57# 以下をtest.shで保存。
#!/bin/sh
a='/+-*'
test $# -eq 1 && { echo $1; exit; } || total=$( ./test.sh $( echo $@ |cut -d ' ' -f -$(( $# - 1 )) ) )
echo $(( $total $( echo $a |cut -b $(( ( $# + 3 ) % 4 + 1 )) ) $( eval echo \$$#) ))
0693名無しさん@お腹いっぱい。
2015/05/28(木) 21:33:17.290694名無しさん@お腹いっぱい。
2015/05/28(木) 21:54:55.27# 割り算部分はできたよ。もう疲れたからやめようかな。
# scaleの値を調整すれば何処まで計算するか指定できる。
# -の値を指定するとずっと計算し続けるので注意。
# dashで動くように書いてる。
#!bin/sh
scale=8
total=$1; shift
m ()
{
test $(( $3 )) -eq 0 -o $(( $1 )) -eq 0 && return
b=$1
a=$(( ${b}0 / $2 ))
echo -n $a
m $(( ${b}0 % $2 )) $2 $(( $3 - 1 )) # 余り、割る数、scale.
}
echo -n $(( total / $1 )).
m $(( total % $1 )) $1 $scale
0695名無しさん@お腹いっぱい。
2015/05/28(木) 22:03:27.91./保存したfile 355 113
と引数二つです。
0696名無しさん@お腹いっぱい。
2015/05/29(金) 02:54:31.46>>690 本人じゃなくてわめいてる方ですけど、勉強になります。
一つ目書き方は知らないので勉強しておく事して二つ目ので見ると、
そっか、と思わされました。確かにその通りだと、コードも短いし理解もしやすいし。
>>659は彼のを参考にしたほうが良かと。私のは今考えて見ると三項演算子も無駄だったし、
ただ>>692は毒毒しい事をしているので、結構勉強になると思う。
0697名無しさん@お腹いっぱい。
2015/05/29(金) 13:11:54.28# ごめん>>694 それ再帰してるから途中で計算できてなかった。
# 悪い所も無駄に関数な所も直して無いけど。以下でいける。
scale=-1
total=$1; shift
m ()
{
b=$1 # $1: 余り、$2: 割る数、$3: scale.
until test $scale = 0 -o b = 0
do
a=$(( ${b}0 / $2 ))
echo -n $a
b=$(( ${b}0 % $2 ))
scale=$(( scale - 1 ))
done
}
echo -n $(( total / $1 )).
m $(( total % $1 )) $1 $scale
0698名無しさん@お腹いっぱい。
2015/05/29(金) 13:15:06.250699名無しさん@お腹いっぱい。
2015/05/29(金) 14:07:59.500700名無しさん@お腹いっぱい。
2015/05/29(金) 17:25:17.77while false
true
do
echo test
break
done
前にfor分は以下で動くのになんでwhileは駄目なんだろうと思った、謎がとけました。
for r in *
{
echo $r
}
0701名無しさん@お腹いっぱい。
2015/05/29(金) 17:41:57.11離れ隠しとも名付けようかこの新手
0702名無しさん@お腹いっぱい。
2015/05/29(金) 19:43:00.94> >>690 本人じゃなくてわめいてる方ですけど、勉強になります。
意外な効果で驚くなあ。でも、役に立って良かった
> 一つ目書き方は知らないので勉強しておく
って言葉で改めて見直すと
> 序盤のページで行き詰ってしまいました。
序盤で行き詰まっているんだよね。そんな人に対して適当な回答じゃあ無かったかもしれないなあ
( parameter substitution の機能とか使うべきではなかったか )と思い、妙なヒント入りでもう一度書いておきました
蛇足だけど、V7 Bourne Shell だと、:- でなく - なんだよね
http://www.in-ulm.de/~mascheck/bourne/v7/
> ${parameter-word}
> If parameter is set then substitute its value; otherwise substitute word.
それでなのか、POSIX でも定義されていて
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_02
bash や、dash でも echo ${HOGE-$HOME} が機能する
>>701
man dash, man bash, man ksh, man zshmisc と確認してみたけど
while list; do list; done 相当の事が書いてある
結構誰でも知っているて、新手では無いよ
0703名無しさん@お腹いっぱい。
2015/05/29(金) 19:44:12.32total=0
while
case $# in
0)
break
;;
1)
total=$( echo "${total} + $1" | bc )
break
;;
2)
total=$( echo "( ${total} + $1 - $2 )" | bc )
break
;;
3)
total=$( echo "( ${total} + $1 - $2 ) * $3" | bc )
break
;;
0704名無しさん@お腹いっぱい。
2015/05/29(金) 19:44:26.35total=$( echo "( ${total} + $1 - $2 ) * $3 / $4" | bc )
break
;;
[5-9]|[0-9]*[0-9])
total=$( echo "( ${total} + $1 - $2 ) * $3 / $4" | bc )
shift 4
true
;;
*)
echo 'It never comes here and we know it.' >&2
exit 1
;;
esac
do : 'Do nothing with list-2 of "while list-1; do list-2; done"'
done
echo "ANSWER: ${total}"
exit
0705名無しさん@お腹いっぱい。
2015/05/30(土) 04:04:02.38#!/bin/zsh
eval echo -n \${$#..1} \'$( yes '+-*/'|tr -d '\n' |dd bs=$(( $# - 1)) \
count=1 cbs=1 conv=unblock 2>/dev/null | sed 's#^#r#')\' p |dc
#!/bin/sh
{ eval echo -n $( seq -f "$%g" $# |tac ); echo "$( yes '+-*/'|tr -d '\n' \
|dd bs=$(( $# - 1)) count=1 cbs=1 conv=unblock 2>/dev/null | sed 's#^#r#' )" p; } |dc
0706名無しさん@お腹いっぱい。
2015/05/30(土) 07:57:05.78eval echo $( seq -f "$%g" $# | tac )
の部分は "$@" とか使えないものかと思い、しばらく考えたんだが...
echo "$@ " | tac -s " "
0707名無しさん@お腹いっぱい。
2015/05/31(日) 07:18:32.49#!/bin/sh
eval echo 0 $( printf '$%d + $%d - $%d @ $%d /' $( seq $# ) | \
sed 's#+ $0#+ 0#g; s#- $0#- 1#g; s#@ $0#@ 1#g; a p' ) |tr '@' '*' |dc
0708名無しさん@お腹いっぱい。
2015/05/31(日) 08:54:03.31後段も書き換えてみた
echo "$( yes '+-*/'|tr -d '\n' \
|dd bs=$(( $# - 1)) count=1 cbs=1 conv=unblock 2>/dev/null | sed 's#^#r#' )" p
#! /bin/sh
# 何をするスクリプトかぱっと見で全くわからないので、一応書いておくけど、
# これも >>659 の回答
{
echo "$@ " | tac -s " "
yes 'r+r-r*r/' | tr -d '\n' | head -c $(( ( $# - 1 ) * 2 ))
echo "p"
} | dc
>>707
アイデアが尽きないね。@は、エスケープ用かな?外しておいた
#! /bin/sh
eval echo 0 $(
printf '$%d + $%d - $%d \\* $%d / ' $( seq $# ) |
sed 's#+ $0#+ 0#g; s#- $0#- 1#g; s#* $0#* 1#g; a p'
) | dc
0709名無しさん@お腹いっぱい。
2015/05/31(日) 11:51:51.690710名無しさん@お腹いっぱい。
2015/05/31(日) 12:23:30.92eval とかなるべく使いたくないけど、printf で展開するアイデアが面白いな
#! /bin/sh
{
eval echo 0 $(
printf '$%d + $%d - $%d \\* $%d / ' $( seq $# ) |
sed -e 's/$0 [+/*\-]* //g'
)p
} | dc
0711名無しさん@お腹いっぱい。
2015/05/31(日) 18:16:33.13#! /bin/sh
{
echo 0 $(
n=$(( $# % 4 ))
printf '%d + %d - %d \\* %d / ' "$@" |
sed -e 's/\([0-9]\{1,\} [+/*\-]* \)\{'"$(( n == 0 ? 0 : 4 - n ))"'\}$//'
)p
} | dc
0712名無しさん@お腹いっぱい。
2015/06/01(月) 06:34:30.80訂正
#! /bin/sh
{
echo "0 $(
n=$(( $# % 4 ))
printf '%d + %d - %d * %d / ' "$@" |
sed -e 's/\([0-9]\{1,\} [+/*\-]* \)\{'"$(( n == 0 ? 0 : 4 - n ))"'\}$//'
)p"
} | dc
0713名無しさん@お腹いっぱい。
2015/06/02(火) 19:51:41.64#! /bin/sh
echo "0 $( printf '%s + %s - %s * %s / ' "$@" "END" | sed -e 's/END.*$//' )p" | dc
0714名無しさん@お腹いっぱい。
2015/06/02(火) 20:48:50.22■ このスレッドは過去ログ倉庫に格納されています