トップページunix
987コメント345KB

シェルスクリプト総合 その13

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。2008/10/16(木) 00:48:38
シェルスクリプトの総合スレです。
スクリプトのお勉強・自慢・腕試しなどにどうぞ。
まずは注意点、リンク、地鎮祭など(>>1-6くらい)をご覧ください。


□お約束
・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。
 bash/zsh/ksh/ashなどに依存する場合は明示しましょう。
 Linuxユーザは/bin/shの正体がbashなので特に注意。
・csh/tcshのシェルスクリプトは推奨されません。
(理由は「csh-whynot」でググれ)
・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。
 manや参考リンクを見ましょう。
 aproposないしはman -kでそれらしい単語による簡単な検索もできます。
・シェルスクリプトのことをシェルってゆーな
・シェルで使えるワイルドカード等は正規表現ではありません。
正規表現の話題はスレ違い(正規表現スレへ)

□初心者へのアドバイス:
・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
 RubyやPerlの方が適した仕事には素直にそちらを使いましょう。
・知らないコマンドが出てきたらmanを引きましょう。
・思い通りに動かないときは、まずは sh -x でトレースしましょう。

前スレ
シェルスクリプト総合 その12
http://pc11.2ch.net/test/read.cgi/unix/1218277263/
0320名無しさん@お腹いっぱい。2008/11/29(土) 21:36:27
>>314
$0に何がセットされるかは、
インタラクティブ環境かどうかとは直接は関係ないという点は理解してますか?
0321名無しさん@お腹いっぱい。2008/11/29(土) 21:39:32
>>319
何の脈絡もなしに、突然新しい話題(内定取り消し)が出てくる時は、
心理学的に、本人自身がその話題(内定取り消し)で悩んでいる場合が多い。
319 自身とか、319の息子とかね。
0322名無しさん@お腹いっぱい。2008/11/29(土) 22:11:23
ということにしたいのですね。
0323名無しさん@お腹いっぱい。2008/11/29(土) 23:02:29
なんだこの流れ

シェルスクリプトのスレだろ?
0324名無しさん@お腹いっぱい。2008/11/30(日) 00:54:43
他に方法あるの?
0325名無しさん@お腹いっぱい。2008/11/30(日) 04:27:45
スクリプトスレでインタラクティブの話題?
インタラクティブなら ps 結果を grep $$ するのも1つの方法

になりえるかなぁとも思ったけど上手くいかない状況もあるかも
あとウチの環境では少なくとも csh の場合はインタラクティブで echo $0 はエラーになる

> 他に方法あるの?
他にとかいう以前に、echo $0 含めそもそも汎用的な方法なんてないんじゃなかろうか?
0326名無しさん@お腹いっぱい。2008/11/30(日) 08:11:52
>>325
psの結果を grep $$ するくらいなら

ps -p $$


>>317
インタラクティブ環境の話題はスレ違いだから、
インタラクティブ環境の事は言っていないのだろうと推して知るべし。
0327名無しさん@お腹いっぱい。2008/11/30(日) 10:59:16
ぷぷぷ。必死だね。

もし、そうなら。>>313のような「あたりまえ」の知識を披露せずに、
「スレ違い」と切って捨てればよい。
0328名無しさん@お腹いっぱい。2008/11/30(日) 11:36:18
>>327
本当は >>313 が指摘するまで知らなかったんだろ?
後からなら「あたりまえの知識」ということにしてごまかせるわな。

あと、回答者にとって「あたりまえの知識」なのは当たり前。
それを知らない質問者が質問してくるから
あたりまえの知識を回答するのがあたりまえ。
0329名無しさん@お腹いっぱい。2008/11/30(日) 12:05:52
このスレはもっと紳士的なシェルスクリプターの集まりだと思っていたのだが…
0330名無しさん@お腹いっぱい。2008/11/30(日) 12:08:17
必死すぎ。www

そう仮定するなら、>>311は明らかに間違っているわけだが。これをどう説明するのだ? www
実行すらせずに思いつきで書いたとでも? www
0331名無しさん@お腹いっぱい。2008/11/30(日) 12:09:57
>>329
純正厨とか変なのが多いぞ。
0332名無しさん@お腹いっぱい。2008/11/30(日) 12:17:46
お前らシェルスクリプトの事話せよw

>>331
俺は汎用性よりも可読性重視だから仕事では自分で一から作るモノは/bin/bashだな。
上の方にでてた四則演算はexprじゃなくてletとか使う。
0333名無しさん@お腹いっぱい。2008/11/30(日) 12:18:04
>>329 よくわからんが、荒らしてるのは >>330 だけだぞ。

>>330 NG登録できるように、なるべくコテハンつける。
0334名無しさん@お腹いっぱい。2008/11/30(日) 12:44:08
>>330
もっと楽な方法があるってこと?
0335名無しさん@お腹いっぱい。2008/11/30(日) 12:58:20
>>334
「反論できねーだろ、>>328」という事。完璧に勝ったな。
0336名無しさん@お腹いっぱい。2008/11/30(日) 13:40:38
すんません。今までシェルスクリプト触ったこと無いものなのですが
突然、SCPとftpでファイル転送するの作ってといわれて途方にくれています。

まずシェルスクリプトのことを学ぶのにどこを見ればいいのか
また上記のことを行うのに参考になるサイトなどありましたらお教えください。

お願いします
0337名無しさん@お腹いっぱい。2008/11/30(日) 13:53:17
SCPとftp両方必要なの?どっちかだけで良いと思うけど勉強用って事?
shスクリプトについてのサイトは知らないけど

linux ftpでググったらこんなサイトが。

Linux ftpコマンド - kozy.heteml.jp
http://kozy.heteml.jp/pukiwiki/index.php?Linux%20ftp%A5%B3%A5%DE%A5%F3%A5%C9#f424c6b5

あとscpの場合はsshの鍵交換しないとパスワード聞かれるから注意
鍵交換してればscpの方が楽
0338名無しさん@お腹いっぱい。2008/11/30(日) 13:58:05
一般的なプログラミングの経験にもよるけど、
今後も書く可能性があるのなら、
本買ってひととおり読んだ方が早いよ。
0339名無しさん@お腹いっぱい。2008/11/30(日) 14:06:02
>>337-338
ありがとうございます。
C/C++を大学でやってきた程度で
鯖をFedoraやDebianで本読みながら立てたくらいです。

Shがどんなものか、触りをWEBで確認したくらいで
サンプルコードを色々弄くってみた程度で、まだ全く使い方がわかっていません

SCPでファイル取得して、FTPで他の鯖に転送という、よくわからない要求です
もう少し勉強します。。。
0340名無しさん@お腹いっぱい。2008/11/30(日) 14:26:18
>>330 は言ってることがつながってないので、
何を主張したいのかわからん。
主張のないものに「反論がない」と言われても、それで >>330 の勝ちにはならない。


>>320 も書いてるが、
$0に何がセットされるかは、インタラクティブ環境かどうかとは直接関係ない。
それを「インタラクティブだから$0にシェルがセットされる」と主張されても
当然間違い。

$SHELLについては、普通にloginすればログイン時にセットされるが、
その後、値を書き換えたり unsetすることもできる。
値を書き換えたり unsetした状態でシェルを起動しても、
$SHELLは改めてはセットされない。
よって、$SHELLではシェルを判定できない。

$shellについてはcsh系の方言だから、B-sh系でセットされていない。
0341名無しさん@お腹いっぱい。2008/11/30(日) 14:43:23
もうやめなよ
0342名無しさん@お腹いっぱい。2008/11/30(日) 16:32:20
>>339
ftp, FTP, SCP, Sh
これらの大文字・小文字の区別はいったいなんなんでしょうね。
きもちわるい。
0343名無しさん@お腹いっぱい。2008/11/30(日) 18:51:09
>>340
loginがシェルのargv[0]に渡すものは決まっている。
0344名無しさん@お腹いっぱい。2008/11/30(日) 19:15:14
treeコマンドで、以下の様にディレクトリやファイルの詳細情報も
合わせて表示させるにはどうすればよいのでしょうか?

# tree /home
/home
`-- TEST drwxr-xr-x 3 root root 4096 2008-10-26 22:28
|-- AA drwxr-xr-x 3 root root 4096 2008-10-26 22:28
| |-- test.csh -rwxr-xr-x 1 root root 4836 2008-11-30 18:25
| |-- test.csh.org -rwxr-xr-x 1 root root 3416 2008-11-29 23:10
| `-- hoge.sh -rwxr-xr-x 1 root root 1834 2008-11-29 23:24
|

0345名無しさん@お腹いっぱい。2008/11/30(日) 19:31:26
>>344
それは「シェルスクリプト」スレに相応しい話題ですか?
0346名無しさん@お腹いっぱい。2008/11/30(日) 19:41:15
>>343
login経由でログインするとは限らない。
0347名無しさん@お腹いっぱい。2008/11/30(日) 19:47:44
>>344
シェルスクリプトと関係無いから次からはくだ質行ってくれ。
各コマンドの事なら大抵はmanかhelpよめばわかるはず。

# tree --help
usage: tree [-adfgilnpqrstuxACDFNS] [-H baseHREF] [-T title ] [-L level [-R]]
    [-P pattern] [-I pattern] [-o filename] [--version] [--help] [--inodes]
    [--device] [--noreport] [--nolinks] [--dirsfirst] [--charset charset]
    [<directory list>]
(snip)
-p     Print the protections for each file.
-u     Displays file owner or UID number.
-g     Displays file group owner or GID number.
-s     Print the size in bytes of each file.
-D     Print the date of last modification.
0348名無しさん@お腹いっぱい。2008/11/30(日) 19:48:17
>>343
loginは argv[0]の頭に - を付けるが、
環境によっては、頭に - を追加するんじゃなくて、
頭の 1文字を - に置き換える。

だから、(イマドキいないと思うが)cshユーザーの場合、
cshの頭の1文字が - に置き換わって -sh になる。
よって、$0 を見て判別するのも無理がある。
0349名無しさん@お腹いっぱい。2008/12/01(月) 00:15:26
>>346,>>348
具体的にその「環境」をあきらかにするように。
キミらの脳内環境?
0350名無しさん@お腹いっぱい。2008/12/01(月) 07:32:44
>>349
え? 知らないんだw
>>348 が言ってるのは昔からUNIX使ってる人には常識だぞ。
0351名無しさん@お腹いっぱい。2008/12/01(月) 07:38:02
>>349
>>346 については、xdmなんかでログインすれば loginは経由しないし、
telnetとかsshの場合もloginは(今は)呼んでいない(自前処理)のはず。
そうじゃなくても、X上でxtermとか開いてもloginは通らないしね。
0352名無しさん@お腹いっぱい。2008/12/01(月) 07:47:41
>>350-351
「あきらかにするように」とか「脳内環境」とか言ってる奴(>>349)に
詳しく教えてやることないよ。

「教えてください」って礼儀正しく言う者にだけ教えればいい。
0353名無しさん@お腹いっぱい。2008/12/01(月) 08:56:28
このスレを見てるだけの傍観者ですが教えてください
0354名無しさん@お腹いっぱい。2008/12/01(月) 10:11:19
>>349はloginの基本仕様すら知らないから、
>>346すら理解できないのだろう。
0355名無しさん@お腹いっぱい。2008/12/01(月) 12:00:03
>>350-352, >>353
そいつらはloginのように振舞わないのか? ww
0356名無しさん@お腹いっぱい。2008/12/01(月) 13:32:40
>>351
> telnetとかsshの場合もloginは(今は)呼んでいない(自前処理)のはず。
嘘つき。telnetは呼んでる。
0357名無しさん@お腹いっぱい。2008/12/01(月) 14:24:21
RFC1416 の Authentication option を使えば呼ばれないはず。
サポートしてない/サポートしてるけどデフォルトでは使わない実装が多いようだけど。
0358名無しさん@お腹いっぱい。2008/12/01(月) 14:42:14
>>355
振舞わないね
0359名無しさん@お腹いっぱい。2008/12/01(月) 21:26:09
今やPAM(OSF RFC 86)化されてるのが多いしなあ。
0360名無しさん@お腹いっぱい。2008/12/02(火) 01:24:02
何と戦ってんだかわけわからなくなってるなw
結局こんな感じだろ?
echo $SHELL これはsh系以外アウト、つまりまったく実用的でない
ps -p $$ 理屈的にまわりくどい
echo $0 理屈的にも納得かつほぼ問題なし
0361 2008/12/02(火) 04:02:11
echo $0
can't read "0": no such variable
0362名無しさん@お腹いっぱい。2008/12/02(火) 07:12:02
>>360
詳しく書くの面倒だけど、
結局のところ >>360 自身も良く理解していない人ということはわかった。
0363名無しさん@お腹いっぱい。2008/12/02(火) 07:15:34
~>echo $0
bash
~>echo $SHELL
/bin/bash
0364名無しさん@お腹いっぱい。2008/12/02(火) 07:20:50
SHELLは全部大文字
そして、echo $SHELLが正しい
0365名無しさん@お腹いっぱい。2008/12/02(火) 09:27:30
$0の例外を指摘するならより実用的な方法を示してくれよ
例外ないものなんてないし
今のところ他の方法よりはマシに見えるけど
0366名無しさん@お腹いっぱい。2008/12/02(火) 10:23:41
>>313
おまえの負け。とっととひっこめ。
0367名無しさん@お腹いっぱい。2008/12/02(火) 12:10:18
zshとかかえされてもw
/usr/local/bin/zshってかえしてもらわないと
0368名無しさん@お腹いっぱい。2008/12/02(火) 12:32:40
>>311は、>>312>>313で否定されているのにしつこいな。
0369名無しさん@お腹いっぱい。2008/12/02(火) 12:59:16
見当外れの指摘で否定したつもりの>>313が哀れ。
0370名無しさん@お腹いっぱい。2008/12/02(火) 15:08:34
俺みんな知らないの知ってるんだぜみたいなつもりだったんだおろうが
なぜそうされないのか、大方理由があるもんだ、素人がいきがっても墓穴ほるだけ

echo $0つかえば?wwwwwwwwwwwww
0371名無しさん@お腹いっぱい。2008/12/02(火) 15:10:35
シェルの名前だったら、大文字、Zsh
パスなら絶対パス
0372名無しさん@お腹いっぱい。2008/12/02(火) 15:17:42
そろそろサマリを
0373名無しさん@お腹いっぱい。2008/12/02(火) 16:00:43
久しぶりにこのスレを覗いてみたらレベルのクソ低いやりとりに泣いた
0374名無しさん@お腹いっぱい。2008/12/02(火) 17:27:56
仕事だったら、echo$0なんていってるやつがうんちく語り出したら
軽く流せないとな
0375名無しさん@お腹いっぱい。2008/12/02(火) 20:37:04
echoとか言っている時点でアホ
0376名無しさん@お腹いっぱい。2008/12/02(火) 21:26:57
意味不明文章作成スクリプトが襲来しているだけですので
スルーで。
0377名無しさん@お腹いっぱい。2008/12/03(水) 01:57:02
空気読まないで質問なんですが、

./scmizu.sh file_list

と起動するとfile_listで定義してあるファイルを削除してくれるツールを作りたいんですが、
今考えてるつくりは、危なっかしい気がしてならないです。
具体的にはどこが危険だかわからないんですが

考慮すべき点を指摘してくれるうれしいです!

file_listの内容

sh-3.2$ cat file_list
/tmp/hage/???
/tmp/hoge/???
/tmp/hoge/hammer.hammer

scmizu.shの内容

#!/bin/sh

# 引数チェック 省略
# 引数のファイルチェック 省略

# 処理

rm -vf `cat $1`




0378名無しさん@お腹いっぱい。2008/12/03(水) 06:07:50
危ない以前に間違ってないか?

0379名無しさん@お腹いっぱい。2008/12/03(水) 06:10:14
こうするべきだろ。

for file in `cat $1`
do
rm -r $file
done


0380名無しさん@お腹いっぱい。2008/12/03(水) 07:12:53
>>378
別に間違ってはいない。

>>379
そう書き換えても解決にならない。

>>377
ファイルリストの中にスペースを含むものがあると正しく削除されなかったり、
別の(削除してはいけない)ファイルが削除されたりする、というのが問題。
0381名無しさん@お腹いっぱい。2008/12/03(水) 07:22:14
お願いします。

以下のスクリプトを実行してみたのですが、エラーがでました。
---------------------------
$ cat hoge.sh
#!/bin/sh

hoge=
if [ $hoge = 10 ]; then
echo hello
fi
---------------------------


エラーの内容は、
---------------------------
$ ./hoge.sh
[: =: unexpected operator
---------------------------

です。
文法的に問題ないのに、なぜ、エラーになるのかわかりません、、、orz

0382名無しさん@お腹いっぱい。2008/12/03(水) 07:27:42
>>381
>>381
hogeの内容が空だから、
if [ = 10 ]; then
となって testコマンドから見るとエラーになる。

if [ "$hoge" = 10 ]; then
とすること。
0383名無しさん@お腹いっぱい。2008/12/03(水) 08:23:55
>>377
そのファイルリスト中のファイルの所有者は自分(root?)だけ?
他人所有のディレクトリ内のファイルでそれをやると危険。
0384名無しさん@お腹いっぱい。2008/12/03(水) 09:46:43
>>377
(IFS="";
while read x; do
rm -vf "$x"
done < file_list)
0385名無しさん@お腹いっぱい。2008/12/03(水) 09:48:55
-rがあるreadなら付けた方がいいです。
\や改行が含まれるパス名がある場合のみですが。
0386名無しさん@お腹いっぱい。2008/12/03(水) 11:18:08
【シェルスクリプトについて】

シェルスクリプトは、短く書けるが、後で可読性が悪い。
他人の書いたシェルスクリプトを解読するためには、予め、
言語仕様を幅広く勉強しておく必要がある。
例えば、"$(cat file)" が `cat file`と同じ意味だと分かるのは、
ある種の幸運が必要だ。この手の物は、本やネットでも検索しよう
がないから。

文脈で記号の意味が変動しやすいことも理解を難しくする。
"$variable"は、変数が展開されるが、'$variable'では展開されない。
ならば、`cat $variable` ではどちらか・・・。推測不可能だ。
0387名無しさん@お腹いっぱい。2008/12/03(水) 11:32:51
>>386
"$(cat file)" は `cat file`と同じ意味ではない。

よってこの文章読む価値なし
0388名無しさん@お腹いっぱい。2008/12/03(水) 11:36:13
PATH = xxxx:$PATH
export PATH

↑これもややこしい部分。

左辺では、PATHと書くのに、右辺では$PATHと書く。exportでは、
再び$を書かない書き方。よく考えれば分からないわけでもないが、
同じ変数なのに場所によって変わってしまうのは分かりにくい。
また、=があれば代入だとみなされるらしいが、外部コマンドの
呼び出しと余りにも微妙な差しかない。

また、シェル変数と環境変数の二つに分かれているので、exportが
必用。しかし、どちらも$変数名で参照できてしまう。
そして、シェル変数は小文字、環境変数は大文字なのに、なぜか、
シェル変数にpathがあり、環境変数にはPATHがあったりする。
0389名無しさん@お腹いっぱい。2008/12/03(水) 11:36:55
>>387
違いは?
0390名無しさん@お腹いっぱい。2008/12/03(水) 11:40:50
>>389
マジで知らないの?
>>386 自体、ネタだと思ったんだけど。他にも突っ込み箇所多数。

>>387
"$(cat file)" と同じなのは "`cat file`"

`cat file` と同じなのは $(cat file)
0391名無しさん@お腹いっぱい。2008/12/03(水) 11:43:33
>>388
> PATH = xxxx:$PATH
↑ この代入文自体が間違い。

これ、誰が書いた文章よ?
程度が低過ぎるから、間違い文章貼るのやめてくれるかな
0392名無しさん@お腹いっぱい。2008/12/03(水) 11:44:26
>>380
では、つっこみ箇所につっこんでみて。

>"$(cat file)" と同じなのは "`cat file`"
>`cat file` と同じなのは $(cat file)

なるほど。それはそうなんだろうけど、それらの違いは
具体的になんでしょう?
0393名無しさん@お腹いっぱい。2008/12/03(水) 11:46:32
>>386
>文脈で記号の意味が変動しやすい

間違い。記号の意味は変動しない。
ただ >>386 が ' ' と ` ` を混同してるだけ。

> `cat $variable` ではどちらか

どちらでもない。
$variable自体はクォートされていないから、
"$variable" でも '$variable' でもなく、
$variable として展開される。

外側の ` ` は、$variableの展開とは別物。
0394名無しさん@お腹いっぱい。2008/12/03(水) 11:50:56
>>392
たとえば、

$ echo `cat file`
とやると、fileの中の改行も、2個以上のスペースも、
ひとつのスペースに変換されて、全体が1行になって表示される。
ファイルの中に * とかがあったら、カレントディレクトリのファイル名に展開される。

$ echo "`cat file`"
なら、そのような変換は行なわれず、
ファイルの内容がそのままechoされる。


いずれも、このスレの回答者にとっては常識中の常識だから、
あまりスレのレベルを下げないでくれ。
0395名無しさん@お腹いっぱい。2008/12/03(水) 11:52:20
>>393
>>文脈で記号の意味が変動しやすい
>↑
>間違い。記号の意味は変動しない。

いいえ、この主張自体には間違いはない。

例えば、
ダブルクォーテーション中では、「$変数名」は展開されるのに、
シングルクォーテーション中では、「$変数名」は展開されない、
という様な事が、文脈によって「$変数名」の意味が変わっていると
みなせる。

もう一つの例としては、
=の左辺では、単に「変数名」と書くだけで変数名とみなされる
のに、右辺では単なる文字列とみなされてしまう、という事が
ある。これも「文脈」によって、解釈の方法が変わっている事の
例。例えば、C/C++/JavaやBasic言語などではこのような扱いは
ありえない。
0396名無しさん@お腹いっぱい。2008/12/03(水) 11:52:37
>>386
> 【シェルスクリプトについて】

最低限の言語習得も怠ったうすら馬鹿の書いた文章。
0397名無しさん@お腹いっぱい。2008/12/03(水) 11:53:53
>>391
間違い箇所は?

=の前後にスペースがあること?
0398名無しさん@お腹いっぱい。2008/12/03(水) 11:55:23
>>395
たった2000行しかないマニュアル(man)読めば書いてることだよ。
お前馬鹿だろ。
0399名無しさん@お腹いっぱい。2008/12/03(水) 11:56:09
>>384
それだと、fileの中の /tmp/hoge/??? というファイル指定が
文字通り ??? というファイルを指定してしまいます。
(3文字名のファイルを指定したい)
0400名無しさん@お腹いっぱい。2008/12/03(水) 12:03:19
eval "rm -vf $x"
0401名無しさん@お腹いっぱい。2008/12/03(水) 12:09:08
>>395
>ダブルクォーテーション中では、「$変数名」は展開されるのに、
>シングルクォーテーション中では、「$変数名」は展開されない、

その意味で言うならC言語でも同じことだろ。

C言語で、
「!var」は変数varの否定演算になるが、
「"!var"」は、単なる文字列になる。
ダブルクォーテーションがあるかどうかで、「!」という記号の意味が
「変動」してるなw

あと、C言語で、
"A" と 'A' の意味も違うしな。
0402名無しさん@お腹いっぱい。2008/12/03(水) 12:10:38
>>400
それだと、スペース入りファイル名の問題が再発します。
0403名無しさん@お腹いっぱい。2008/12/03(水) 12:15:50
>>395
> =の左辺では、単に「変数名」と書くだけで変数名とみなされる
> のに、右辺では単なる文字列とみなされてしまう、

Cでも、左辺値と右辺値は区別されている。左辺値になれない式が存在する。
Cでも文脈によって意味が変わるということだ。
0404名無しさん@お腹いっぱい。2008/12/03(水) 12:18:43
>>1
「文脈で変動している」
と言っても、コンピュータにはとっては筋が通っており、解析自体が
不可能なわけではない。

しかし、問題は、そのような例外が多くあると、シェルスクリプトの
初心者が他人のスクリプトを見た時に混乱しやすいことと、意味を調べ
たくても、検索し辛いことにある。

・「(英)単語」であれば検索しやすいが、記号だとしづらい。
・文脈依存性が強いと、調査に時間がかかる。
0405名無しさん@お腹いっぱい。2008/12/03(水) 12:20:36
>>403
変動はしているが、x に x + 1 を代入したい時は素直に、
x = x + 1;
と書けばよい。一方、シェルスクリプトでは、複雑なことになる。
evalやらを使うんだと思うが。
0406名無しさん@お腹いっぱい。2008/12/03(水) 12:25:05
404 の >>1 は、>>401 の間違い。
0407名無しさん@お腹いっぱい。2008/12/03(水) 12:28:30
>>388 の言いたいことがわからんでもないけど
もともとシェルはコマンド実行ユーティリティだから
普通のプログラム言語っぽく使えるだけて満足だがなあ

つ−か、書き方によってはサブシェルになる方が問題かと
0408名無しさん@お腹いっぱい。2008/12/03(水) 12:28:47
>>405
> evalやらを使うんだと思うが

ハイハイ、あなたの理解度はその程度ですねw
evalは使いません。勉強してから出直してね。
0409名無しさん@お腹いっぱい。2008/12/03(水) 12:30:28
>>405
bash限定でいいなら、
((x = x + 1))
って素直に書けるよ。

さらに、
((x++))
という書き方もできる。
0410名無しさん@お腹いっぱい。2008/12/03(水) 12:33:52
>>408
別に自慢のために書いているんじゃなく、シェルスクリプトの問題点を
考えたいと思っているだけなのに。
0411名無しさん@お腹いっぱい。2008/12/03(水) 12:36:49
evalではなく、exorか、$((xxx))だった。
0412名無しさん@お腹いっぱい。2008/12/03(水) 12:37:36
>>404
> しかし、問題は、そのような例外が多くあると、シェルスクリプトの
> 初心者が他人のスクリプトを見た時に混乱しやすいこと



自分が理解できていないことを「例外」ということにしたいのですね、わかります
0413名無しさん@お腹いっぱい。2008/12/03(水) 12:37:49
exor ---> expr
0414名無しさん@お腹いっぱい。2008/12/03(水) 12:41:33
ここは、言語の根本問題とかを議論できる場ではなかったかな。
勉強不足であろうがなかろうが、言語に問題があるかどうかが
議論したかったのに。
0415名無しさん@お腹いっぱい。2008/12/03(水) 12:50:40
>>414
そういうことを本気で議論したいなら、
まずは一通りでもその言語(シェルスクリプト)を習得してからじゃないと。
(批判しているつもりが、勉強不足のせいで批判ポイントがずれているしね)

>>386 のような間違いだらけの文章を書いたのでは、
どこに行っても誰にも相手にしてもらえないよ。
0416名無しさん@お腹いっぱい。2008/12/03(水) 13:04:01
「間違いだらけって」言っても、
$(cat file) と "$(cat file)"
の違いだけじゃん。
0417名無しさん@お腹いっぱい。2008/12/03(水) 13:20:13
それだけじゃないよ。
面倒だから、間違い箇所を挙げるだけにするよ。

(1)まず、
>"$(cat file)" が `cat file`

(2)
>本やネットでも検索しようがないから。
本の索引で記号は検索できる。
あと、man sh (man bash) でも lessで検索できる。

(3)
>文脈で記号の意味が変動
しない

(4)
>ならば、`cat $variable` ではどちらか
そもそも、' 'と ` ` の意味を理解していない。
「どちらか」という問い自体が間違い

(5)
>推測不可能だ
マニュアルに載ってる。推測なんて不要。
0418名無しさん@お腹いっぱい。2008/12/03(水) 13:20:46
(6)
>PATH = xxxx:$PATH
スペースを入れちゃ駄目

(7)
> =があれば代入だとみなされる
というわけでもない

(8)
>シェル変数は小文字、環境変数は大文字
とは限らない

(9)
>シェル変数にpathがあり
そんなものない

ざっと挙げても9箇所間違い。もっと細かく見ればもっと間違いが出てくるだろう。
0419名無しさん@お腹いっぱい。2008/12/03(水) 13:23:16
あんたは、頭が固いだけじゃん。
■ このスレッドは過去ログ倉庫に格納されています