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

■ このスレッドは過去ログ倉庫に格納されています
2020/03/23(月) 01:12:30.31ID:TYte82vJ
シェルスクリプトに関する総合スレッドです。

全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。
・「○○(他の言語)でいいやん」は禁止。他のスレに行ってください。

シェルスクリプト総合 その32
https://mevius.5ch.net/test/read.cgi/tech/1571929725/
2020/04/16(木) 19:28:03.58ID:pf1fo5EI
あと環境汚すようなときにも使うな。
関数定義してなにかしたいけど、後で消したいとか
まあサブシェルとかでもいいんだけど
2020/04/16(木) 19:39:39.35ID:MiKwJnZu
>>158
なるほどー。素晴らしい。
2020/04/16(木) 21:47:35.66ID:phPWx1q3
>>159
interactive shellじゃない場合は
`shopt -s expand_aliases; source <alias設定file>` でエイリアスが展開される

$ cat .alias_and_fn
alias ll='ls -tAhG'
foo() {
echo "foobar!!"
}
$ cat input.txt | xargs -I {} bash -O expand_aliases -c $'source .alias_and_fn;¥n ll {}; foo'

行単位で読み込むときにalias展開するからaliasを設定した後に改行入れてから使う

interactiveなログインシェルとして起動したければ`bash -cli`とか
詳しくはman bashで
2020/04/16(木) 22:37:57.81ID:tywb42E3
bash -c は、よく見る
16556
垢版 |
2020/04/17(金) 06:27:50.85ID:wSTFfL+S
>>56
ようやく、分かりますた!

xxx="$(command -v rbenv)"
と、端末で直接実行すると、xxx は、rbenv となって、パスが付かないのは、
すでに、rbenv という関数が定義されたファイルを読み込んでいるため、
同名のコマンドよりも先に、関数が見つかるから

一方、xxx="$(command -v rbenv)"
と、bash スクリプト内に書いて、スクリプトを実行すると、
xxx は、~/.rbenv/bin/rbenv とパスが付くのは、
rbenv という関数が定義されたファイルを読み込んでいないため、コマンドが見つかるから

シェル関数を使うには、その関数が定義されたファイルを読み込んでから使うのか
2020/04/17(金) 06:41:06.63ID:BxfxWji9
Ubuntuでシステムのシェルってdashになってるみたいですけど、確かこれってbashより
速いからって理由でしたっけ?

実際どのぐらい違うか興味があるんですが、どこかにdashとbashのベンチマーク比較した
情報とかあります? (自分でやれって? w)
2020/04/17(金) 10:38:11.77ID:9nBzfuh2
>>166
なんの速度かは言わないがあるツールをdashで動かしたら約3秒
bash 5.0 だと 11秒、kshだと6秒でzshだと9秒
2020/04/17(金) 10:44:00.48ID:9nBzfuh2
dashを選んでるのは速度もあるしPOSIX準拠ってのもあるだろうね
2020/04/17(金) 14:54:31.55ID:Urb0mH6b
関数を一行で書く時エラーで悩んでたけど波括弧ってに空白いるのな
foo(){ echo foo;}
小括弧だと必要ないのに何この初見殺し
2020/04/17(金) 15:09:03.88ID:xgpGiYXu
>>169
shellcheck使うといいよ
2020/04/17(金) 15:40:41.15ID:9nBzfuh2
>>169
zshは空白無くても動く

zsh -c 'foo(){echo test;};foo
test

dashはコンパイルエラー起こらないと思いつつ、実行するとエラーになり
dash -c 'foo(){echo test;}' # コンパイルエラー起こらない
dash -c 'foo(){echo test;};foo' # でも実行すると怒られる

実は"最後の" ; がおかしい
dash -c 'foo(){echo test;} foo' # これを実行するとこうなる
{echo: not found

エラー内容から、最初の { がおかしい事がわかる。これが正解
dash -c 'foo()echo test;} foo'
test

後ろの } はただのノイズだと思われるので、とってあげても動く
dash -c 'foo()echo test; foo'

↑これは POSIX 準拠なので(笑)zshやkshやmkshでも動く
でもbashやyashでは動かない

そこから考えると
dash -c 'foo()echo test;foo' は動くということがわかるし、
dash -c 'foo()echo test;}foo' は
foo()echo test +}foo になるので、 }foo: not found と表示されることも理解できる
172デフォルトの名無しさん
垢版 |
2020/04/17(金) 16:52:28.83ID:nls2b0po
>>171
> dash -c 'foo()echo test; foo'
>
> ↑これは POSIX 準拠なので(笑)zshやkshやmkshでも動く
> でもbashやyashでは動かない

それは bash や yash の方が正解
関数定義の本体は複合コマンド(compound command)のみ
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_09_05

ちなみに yash や posh はこれに関して、bash よりも分りやすいエラーメッセージを吐く:

% yash -c 'f() echo'
yash -c:1: syntax error: a function body must be a compound command
% posh -c 'f() echo'
posh: f: function definition must use compound command
%
2020/04/17(金) 17:38:27.88ID:9nBzfuh2
>>172
compound-command は必ずしもグループ化しろとは書かれてないよ
グループ化はオプション
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_09_04
2020/04/17(金) 19:28:17.38ID:3FstJMua
>>170
これいいですね
解説が丁寧で、初心者の自分には勉強になる
175デフォルトの名無しさん
垢版 |
2020/04/17(金) 19:40:14.03ID:nls2b0po
>>173
何を言いたいのかわからない

>>172のリンク先で関数定義の形式として示されているのは
fname ( ) compound-command [io-redirect ...]
の一種のみ

echo test は compound-command ではないから
foo() echo test; などは上記の形式には当てはまらない
という話なんだけど

「グループ化」云々ってどっから出てきたの
2020/04/17(金) 19:56:23.51ID:UJSQQO8I
え,関数って一行で定義するときは
foo() echo hello;
みたいに波括弧で括る必要ないの?
知らんかった。
2020/04/17(金) 19:58:37.78ID:9nBzfuh2
>>175
リンク先見ろ、Grouping Commands って書いてあるだろ

compound-command は
 () や {} でグループ化してもいいし、しなくてもいい
 単一のコマンドも compound-command
 というか、単一のコマンドが compound-command であり
 複数のコマンドをまとめる時に Grouping Commands を使う
2020/04/17(金) 19:59:07.40ID:9nBzfuh2
>>176
本来はね。でもbashで対応してないから事実上諦めるしかない。
2020/04/17(金) 20:01:55.41ID:9nBzfuh2
>>176
あとグループ化するのに使うのは {} または () なので

foo() { echo hello; } の代わりに
foo() (echo hello) と書いても良い

こっちはbashやyashも対応している。
ただし当然のことながらサブシェルで実行される。
2020/04/17(金) 20:05:05.86ID:9nBzfuh2
fname ( ) compound-command [io-redirect ...]
の最後からわかるように

foo() { echo hello; } >/dev/null や
foo() (echo hello) >/dev/null とも書ける

もちろん複数行でこのように書いてもいい
関数が出すエラーを全て捨てる場合とかに使える

foo() {
 echo hello
} 2>/dev/null
181デフォルトの名無しさん
垢版 |
2020/04/17(金) 20:07:41.32ID:nls2b0po
>>177
> 単一のコマンドも compound-command
> というか、単一のコマンドが compound-command であり

それ初耳だわ
どこに書いてある?
2020/04/17(金) 20:13:43.55ID:9nBzfuh2
>>181
なんのために Grouping Commands と別に説明してある思ってる?

Grouping Commands を作るための {} または () が必須じゃないから、
「compound-commands の定義は {} または () で始まる」と*書かれてない*んだよ
2020/04/17(金) 20:56:24.03ID:xgpGiYXu
2.9.4 Compound Commands
The shell has several programming constructs that are "compound commands", which provide control flow for commands.

Each of these compound commands has a reserved word or control operator at the beginning, and a corresponding terminator reserved word or operator at the end

でその後Compound Commandsとして上げられてるが以下の6つ
- Grouping Commands
- The for Loop
- Case Conditional Construct
- The if Conditional Construct
- The while Loop
- The until Loop

echo helloは開始・終了を示す予約語もなければ、上の6つのどれにも当てはまらないからCompound Commandではない
2020/04/17(金) 20:57:55.90ID:xgpGiYXu
foo() if true; then echo "foobar"; fi
↑こういうのはOK

↓shellcheckの解説
POSIX allows the body of a function to be any compound command, e.g. foo() for i; do :; done. Since this usage is rare, ShellCheck intentionally requires the body to be { ..; } (or ( ..; )):
https://github.com/koalaman/shellcheck/wiki/SC1064
2020/04/17(金) 21:06:47.56ID:9nBzfuh2
>>183
Compound Commands はその6つって言いたいの?

なら以下の関数定義はPOSIX 準拠ってことだね

foo() for i in a b c; do echo $i; done
foo() case a in a) echo a; esac
foo() if [ a ]; then echo a; fi
foo() while [ $# -gt 0 ]; do echo $1; shift; done
2020/04/17(金) 22:32:27.89ID:UJSQQO8I
<<. dash
foo() echo hello
foo
.
hello

たしかにDashだと問題なく定義できるな……。
こんなこと始めて知ったわ。実地で使うかどうかは置いといてw
2020/04/17(金) 23:15:40.63ID:lZxGXmOk
要するに素直に括弧でくるんどけってことやな
188デフォルトの名無しさん
垢版 |
2020/04/18(土) 00:16:26.14ID:sxA+eVU/
>>166
https://unix.stackexchange.com/questions/148035/is-dash-or-some-other-shell-faster-than-bash
2020/04/18(土) 00:28:42.97ID:6r7FvQ+k
>>169
type { }やると分かるけど{}はシェルの予約語
{}に意味があるから{ この空白も閉じる前の;}もいる
for i inをforiinにできないようなもんで
()はtypeで何も出てこないけどね
190デフォルトの名無しさん
垢版 |
2020/04/18(土) 13:41:33.88ID:6HUqz/fc
set -eの挙動について教えて下さい!

これを実行したら何も表示されずに終了されました
set -e
foo() {
false
echo foo
}
foo
echo $?

その理由はわかります

質問はfooの中身を一切変えずにset -eの状態で
fooを画面に表示させずに $? (= 1) を
取得する方法はあるのでしょうか?
2020/04/18(土) 13:58:58.99ID:iaqzJhUO
{ と [ は記号でなく「コマンド」

$ ls -l



$ ls-l

とスペースを入れないと動かなくなる
これと一緒
2020/04/18(土) 15:04:41.42ID:uOWDKjxa
>>190
! ret=foo
echo $?

or

if ret=$(foo); then
echo "truthy" "$ret" "$?"
else
echo "falsy" "$ret" "$?"
fi
193デフォルトの名無しさん
垢版 |
2020/04/18(土) 16:16:36.81ID:6HUqz/fc
>>192
> ! ret=foo
なんですか、これ!?って思ったらfoo関数呼び出してないじゃないですかぁ

> if ret=$(foo); then
なるほど、これで取得できるんですねって思って
やったんですけど truthy foo 0 ってでました
2020/04/18(土) 16:53:00.73ID:8o9dGOG1
>>190
パイプライン (1 つの 単純なコマンド からなるものでもよい)、 括弧で囲まれた サブシェル のコマンド、 ブレース (前述の シェルの文法 を参照) で囲まれたコマンドのリストの一部として
実行されたコマンドの 1 つ が 0 でないステータスで終了した場合、即座に終了します

だから。falseの時点でどうであれメインシェルプロセスがそこで終了、echo fooなんて実行しない、もちろん呼び出し元にも戻らない
>>192は上記に続く文に沿ってのじゃないかなあ。だが、if false; then ... とかの話で、違うだろうな文的にも。わざとなのかわからんけどw

そういう動作を望んで set -e してるのにそういう動作すんなって無理じゃね
2020/04/18(土) 17:07:44.49ID:8o9dGOG1
bash 限定なら、
export -f foo
bash -c 'foo' && echo $? || echo $?
で、一応動くようではあるな(ちゃんとfooでのステータス値も返る)
2020/04/18(土) 17:44:44.40ID:8o9dGOG1
>>195
bash -c 'set -e;foo' && echo $? || echo $?
だった。set -e は別に継承されるわけないと後で気づいた

で、>>192のネタ確認してみたらできそうなのね。$()なんて出力結果求めるのにしか使ったことないのでこれでいいのか??と頭ウニだけど

if $(set -e && foo); then echo $?; else echo $?; fi

なんかbash限定でもなく動いてるな(w)
2020/04/18(土) 17:58:24.37ID:8o9dGOG1
あぁ、$() は正常時はやっぱりダメか。そりゃそうだな(スッキリしたw)
ret=$(foo) のような、なんか工夫すればできそうな気もしないでもないが。そういうことなのね、失礼>>192
2020/04/18(土) 18:28:05.36ID:fB7EV6Kq
その方針なら

export -f foo;
ret=$(bash -c 'foo; echo $?');
echo $ret;

で良いんじゃね?
2020/04/18(土) 19:01:48.64ID:8o9dGOG1
出力結果をスクリプトで扱うために欲しいわけじゃないから
$() だと関数も外部コマンドのように別(のメイン)プロセスとして呼べる=bash固有のでなくて使えそうだなあという、ニコイチではなくどっちかの話
2020/04/18(土) 19:14:49.95ID:fB7EV6Kq
ああすまん、fooの出力を忘れてた。
2020/04/18(土) 23:55:48.35ID:L3zGDU5z
$ $(echo hoge)
hoge: command not found
まあ、当然そうだわな
$ $(exit 12)
$ echo $?
12
へー、コマンドねえぞとお怒りにはならんのか。空行とみなして無かったこと(?)になるのか
echo ' 'とかスペースタブだけ(?)なら許してくれる、: と違いステータスも変わらない

てことで、標準出力に何も出さなければいいのねで、

exec 9>&1
$(set -e; foo >&9) && echo $? || echo $?

でbash以外でも動くことは動く ($() 内ってCommandsでもいいのね)
$()内での set -e はない方がスッキリだが必要ないシェルもあるもあるが必要とするシェルがある
2020/04/19(日) 00:14:03.50ID:u21QryuH
例えば、Ruby のバージョンマネージャー・rbenv の、rbenv-installer の冒頭部分は、

#!/bin/bash

# コマンドの終了コードが、0以外なら強制終了する
set -e

homebrew=

# -p : タイプが「file(実行ファイル)」の時のみ実行ファイルの絶対パスを出力する
# (それ以外のタイプの場合は何も出力しない)

type -p brew >/dev/null && homebrew=1
2020/04/21(火) 09:06:14.84ID:h1bS6DJt
コマンドってファイルに書くのと実行形式を~/binに置くのとどっちがいいの
関数とエイリアスの違いは分かったけど使い分けできてないな
2020/04/21(火) 10:50:42.27ID:FcWzzI7X
/dev/urandomっていうデバイスファイルが,
ほんとにただのファイルとか実は同じ値ばっかり出力するデバイスファイルとか
じゃないってことを保証する方法ってある?
2020/04/21(火) 13:16:25.79ID:bkXsrA+q
>>203
いろんなところで使いたいコマンドは ~/bin に置いておいて
パスを通しておく。限定的な使い方をするコマンドはそのディレクトリに
置いておくのかな。私はそうしている。
206デフォルトの名無しさん
垢版 |
2020/04/21(火) 15:24:10.19ID:Lx1iEb8v
>>204
ないよ。
作ろうと思えば/dev/urandomを独自実装のデバイスファイルに置き換えられるんだから。
それっぽい値を返すデバイスファイルを作ろうと思えば作れる
例えばWSL1はWindowsでLinuxカーネルをエミュレートしてるんだから
/dev/urandom とかMSの独自実装のデバイスでしょ?
207デフォルトの名無しさん
垢版 |
2020/04/21(火) 15:27:13.15ID:Lx1iEb8v
>>203
コマンドをファイルに書くって関数のこと?
CLIから呼び出す汎用的なものは~/binで
スクリプト内部で使うだけなら関数にするだけじゃないの?
そしてエイリアスはインタラクティブシェルで使うもの
bashがデフォルトでスクリプトでは無効になってるのはそういう事
2020/04/21(火) 16:17:24.29ID:fQ5b9H0O
>スクリプト内部で使うだけなら関数にするだけ
と思い込んでたら、>>56みたいになるぞw
>bashがデフォルトでスクリプトでは無効になってるのはそういう事
まあ、4からか?そういう方がいいだろうと思い変えたのだろうが、--posixでは有効なんだけどな
209デフォルトの名無しさん
垢版 |
2020/04/21(火) 16:29:23.76ID:Lx1iEb8v
>>56は、rbenvはインタラクティブシェルで使うために
alias使ってるんでしょ?

> まあ、4からか?
ずっと前からやろ?
210デフォルトの名無しさん
垢版 |
2020/04/21(火) 16:30:27.22ID:Lx1iEb8v
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/alias.html
POSIXでも interactive utilities.って言われてるぐらいだしな
2020/04/21(火) 16:43:50.04ID:fQ5b9H0O
>>209
残念ながら、3はそうなってない
2020/04/21(火) 16:47:30.51ID:fQ5b9H0O
>>210
ちゃんと読めよ
2020/04/21(火) 16:59:29.51ID:fQ5b9H0O
>>209
>alias使ってるんでしょ?
ああ...これもか...
色々想像するのは勝手だが、なんか色々勝手な想像ばかりで全く調べてないなって感じだぞ
2020/04/21(火) 17:43:01.90ID:fQ5b9H0O
>>209,211
ああ、すまん
実行できないのは最初からだし、存在さえもしないのは3以降からだな(2では存在はするが実行時エラー)
>まあ、4からか?そういう方がいいだろうと思い変えたのだろうが
の部分は間違い勘違い、すまん
215デフォルトの名無しさん
垢版 |
2020/04/21(火) 18:23:13.41ID:Lx1iEb8v
>>213
調べるとか何のこと?
スクリプト内部でだけ使うなら関数って言ってるだけなんだけど?
21656
垢版 |
2020/04/21(火) 20:51:03.40ID:HADG6GDb
anyenv は多言語向きで、rbenv, nodenv, pyenv, phpenv などを同じ使い方で、統一的に扱える。
~/.bashrc に、下の2行を追加するだけで、各言語ごとに追加しないでも良い

export PATH="$HOME/.anyenv/bin:$PATH"
eval "$(anyenv init -)"

結局、この追加した、eval で、rbenv という関数を読み込んでいたという落ちw
21756
垢版 |
2020/04/21(火) 20:57:08.31ID:HADG6GDb
>>165
に書いてます

シェル関数は、その関数が定義されたファイルを読み込んでいれば使えるけど、
読み込んでいなければ使えない
2020/04/21(火) 21:30:49.10ID:fQ5b9H0O
>>215
想像でそれも自分の言ったことに都合が良いだけで言うなってことだよ
すぐ下のレスに状態を本人が書いてるだろに
219デフォルトの名無しさん
垢版 |
2020/04/21(火) 21:50:22.71ID:Lx1iEb8v
rbenvはaliasをインタラクティブシェルで使ってない

だからといって、
「aliasはインタラクティブシェルで使うもの」を
否定してることにはならんのだが・
2020/04/21(火) 22:16:38.40ID:fQ5b9H0O
何言ってるの?
>>スクリプト内部で使うだけなら関数にするだけ
>と思い込んでたら、>>56みたいになるぞw
から、想像だけで「alias使ってるんでしょ?」て間違ったこと「いきなり」言い始めたんんだけど。それが関数なんてすぐ下に書いてあるのに、見も/調べもせずに「いきなり」

「スクリプト内部で使う[だけ]なら[関数]」だから、見も/調べもせずに「alias使ってるんでしょ?」なんて間違いを平気で言ったんでしょ?

aliasはインタラクティブシェルで使うものは別件で、そこは関数のことだろに


aliasはインタラクティブシェルで使うものは特に否定はしてないが、POSIXでそう決めてるわけではない。>>210を自分でちゃんと読めば>>210はなんの補強にもなってないのに誤った抽出ってこと
221デフォルトの名無しさん
垢版 |
2020/04/21(火) 22:19:02.65ID:Lx1iEb8v
「スクリプト内部で使うだけなら関数にするだけ」は
否定しないんだね
2020/04/21(火) 22:21:12.97ID:fQ5b9H0O
読めなさすぎだろう。なんでそうなる??
スクリプト内部で使う[だけ]じゃない[関数]がって例の話なのに
ダメだな読めなさすぎ、今までのでも
2020/04/22(水) 05:24:59.12ID:6NXdX+6G
お前らいつも質問者を置き去りにしてんな
2020/04/22(水) 05:43:01.59ID:Beb++bH7
こいつもう辞めた方がいいな
2020/04/22(水) 11:23:37.41ID:3RYHR+yq
質問箱スレじゃないから
2020/04/22(水) 16:58:30.97ID:UC4McjLk
枯れた技術のスレで質問禁止にしたら超絶過疎っちゃうよ
2020/04/22(水) 18:17:22.60ID:hVJ7sunP
質問禁止という意味じゃない。質問もありだし質問のをネタにしたのもあり
質問箱スレならQ/A以外は雑音にしかならんという意味
228デフォルトの名無しさん
垢版 |
2020/04/23(木) 02:03:46.11ID:SDkT6EOl
cronの書式を読み取りたいんですがなぜかファイル名が読み取られてしまいます。なぜでしょうか?
2020/04/23(木) 22:30:55.15ID:LOz3K8jb
どうやったらそんな挙動になるんだ?
ちょっとどんなコマンド打ったか書いてみて。
230デフォルトの名無しさん
垢版 |
2020/04/23(木) 23:01:10.88ID:UKSnHl0c
>>228
クォートしてないからでしょ
$ ls
crontab
$ echo * * * * * user-name command to be executed
crontab crontab crontab crontab crontab user-name command to be executed
$ echo "* * * * * user-name command to be executed"
* * * * * user-name command to be executed
2020/04/24(金) 00:57:40.18ID:QUI7MWka
>>229
setを使ってスペース区切りで分割したらファイル名になりました

>>230
そこから各フィールドごとに分割するのはどうしたらいいでしょうか?
2020/04/24(金) 01:55:29.65ID:oLSoKJut
awk使っちまうなあ
楽チンで
2020/04/24(金) 02:13:20.42ID:QUI7MWka
その後シェルスクリプトで処理をしたいんです。
2020/04/24(金) 02:56:11.86ID:F2FblhOM
read
2020/04/24(金) 03:11:08.96ID:F2FblhOM
cat /etc/crontab | grep -v '^[ \t]*#' | while read m h D M W u c; do [ "$c" != '' ] && echo "$M/$D $W $h:$m ($u) $c"; done
でいいのかな??

しかし、>>228から * のGLOB展開とわかるなんてすげえなw>>230
2020/04/25(土) 23:21:25.07ID:dkVnBOhV
他スレで -z とか見て思い出したんだけどさ
[ -z "$str" ] とか [ -n "$str" ] って必要なの?
[ "$str" ] とか [ ! "$str" ] でいいと思うんだけど?

[ "$op" "$str" ] みたいに演算子を変数に入れられるから
機能そのものが不要だとはは思わないけど
通常は [ "$str" ] や [ ! "$str" ] で良くない?
他の言語だとこっちだからわかりやすいし
2020/04/25(土) 23:31:42.54ID:gS2ps0hn
他の言語だったらそういうのはBooleanでしか使わないという文化な人々も居る
[ -z "$str" ] や [ -n "$str" ] よりも [ "$str" = "" ] とか [ "$str" != "" ] の方が見る機会が多かったな
238デフォルトの名無しさん
垢版 |
2020/04/25(土) 23:59:47.04ID:Ey2ZfVC3
>>236
先頭にマイナス記号が入らないことが保証されるのならいいのでは?
2020/04/26(日) 00:16:24.29ID:D7tlSM02
>>238
関係ないでしょ? その場合こう展開される
[ "-z" ] または [ "-n" ] これはどちらも文字列があるから0

[ ] で囲まれた中身が1個の場合は決してオペレータとして扱わないのだから
どんな文字が来たとしても問題ない。空文字以外は0となる
ついでにいうと [ ] の中身が0個の場合は常に非0

そもそも [ ] (test)のドキュメントに
STRING は -n STRING と等価と書かれている
仕様通り
240デフォルトの名無しさん
垢版 |
2020/04/26(日) 03:16:05.39ID:cVjuSaki
>>239
他の条件とand/orされる場合は?
2020/04/26(日) 03:17:32.99ID:D7tlSM02
>>240
-a と -o に関しては、shellcheckさんが禁止しております
[ 略 -a 略 ] は使いません。必要なら [ 略 ] && [ 略 ] こうします
242デフォルトの名無しさん
垢版 |
2020/04/26(日) 03:29:33.94ID:cVjuSaki
>>241
そういう独自ルールを適用するならそれで良いんじゃねえか?
ただ独自ルールだからそれとセットで説明する必要がある。
2020/04/26(日) 04:31:48.38ID:D7tlSM02
>>242
ん?でもさ -a とか -o 使っても問題ないんじゃね?
[ str -a ] みたいなのってありえないんだからさ[ -a -a ] もないでしょ?
[ -a -a -a ] だと 最初と最後が文字だって一意に識別できるよね?

訂正する
> 他の条件とand/orされる場合は?

他の条件とand/orされる場合 かつ 混乱するようなパターンってありえるの?
244デフォルトの名無しさん
垢版 |
2020/04/26(日) 04:38:33.47ID:cVjuSaki
>>243
シェルというかtestコマンドってそんなに賢く自動判別してくれるの?
これからそういうシェルまたはtestコマンド作るって話?
だったら作ればいいんじゃね?そうすればそれはそういうものですって言えるしそれでokだ。
2020/04/26(日) 04:48:09.65ID:D7tlSM02
なんでシェルをディスってるの?
これからも何も「testは賢く判断するから問題ないよね」って聞いてるだけなのに
2020/04/26(日) 04:53:55.28ID:D7tlSM02
>>244
こういえば良いのか?
POSIXで決まっている仕様どおりの正しい動きです。
これから作る必要など全くありません。
247デフォルトの名無しさん
垢版 |
2020/04/26(日) 04:56:34.45ID:cVjuSaki
あ、そう。じゃあそれでいいんじゃね?
2020/04/26(日) 06:08:44.50ID:D7tlSM02
何が気に食わないんだろう(笑)
2020/04/26(日) 14:42:15.32ID:v6fWLjMY
>>236と同一人物に見えて俺流儀の押し付けしたいのか何をしたいのかだろな
2020/04/26(日) 15:26:53.79ID:D7tlSM02
質問者 (POSIX準拠の仕様)これ問題ある?
回答者 問題あるに決まってるだろ。あれとかこれとかどうなんだ?

質問者 それらは問題ないよね?
回答者 お前の流儀を押し付けるな!

なんだこのながれ
2020/04/26(日) 15:35:41.02ID:UR76YMSe
  /\___/\
/ /    ヽ ::: \
| (●), 、(●)、 |    / ̄ ̄ ̄ ̄ ̄ ̄ ̄
|  ,,ノ(、_, )ヽ、,,   |  < まーたはじまった
|   ,;‐=‐ヽ   .:::::|    \_______
\  `ニニ´  .:::/
/`ー‐--‐‐―´´\
2020/04/26(日) 15:55:10.56ID:D7tlSM02
まともなレスじゃなくて、個人たたきに変わったからな
POSIXの仕様にたいして俺流儀とかアホかと
2020/04/26(日) 18:41:28.13ID:vc5fDz2w
それ以上POSIXを唱えるな
奴が来る
254デフォルトの名無しさん
垢版 |
2020/04/28(火) 06:27:22.31ID:6K6MgdzD
ハクション大魔王2020は面白いな。
2020/04/28(火) 08:02:31.62ID:w59d7UdO
俺流儀に見えたってことはそういうことでは
虚栄心だけじゃ何も学べないよねぇ
2020/04/28(火) 08:18:47.52ID:+3UriQww
詠唱




────POSIX準拠



 
2020/04/28(火) 13:15:20.29ID:85h3VPXT
宗教みたいだぁ…(直喩)
258デフォルトの名無しさん
垢版 |
2020/04/28(火) 15:22:47.80ID:7mVXavmj
宗教だろ…(直球)
2020/04/29(水) 07:41:19.70ID:kBxqIvnv
お前のログインシェルをfishにしてやろうか
2020/04/29(水) 13:35:45.09ID:CfLIzb8G
>>259
それはPOSIX準拠?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況