シェルスクリプトの総合スレです。
□お約束
・特記なき場合はBourne Shell(/bin/sh)もしくはPOSIX準拠の互換シェルがデフォルトです。
bash/zsh/ksh/ash/dash/yash/poshなどの専用機能に依存する場合は明示しましょう。
Linuxユーザは/bin/shの正体がbashまたはdashなので特に注意。
FreeBSDユーザは/bin/shの正体がashなので注意。
・POSIXについてのリンクは https://en.wikipedia.org/wiki/POSIX にまとめられています
最新の仕様はこちらへ http://pubs.opengroup.org/onlinepubs/9699919799/
(左上の「Shell & Utilities」 から参照することができます。)
・v7 shに一番近くて、現役(?)のshは、OpenSolaris由来のheirloom sh。
http://src.illumos.org/source/xref/illumos-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に逃げずにシェルスクリプトで処理するのが頭のいいやり方。
質問に対して問題が間違ってるといちゃもんをつけるのもやめましょう
シェルスクリプト総合 その27
https://mevius.5ch.net/test/read.cgi/unix/1525337663/
探検
シェルスクリプト総合 その28
■ このスレッドは過去ログ倉庫に格納されています
2018/08/02(木) 05:22:16.82
2021/09/01(水) 02:30:08.96
そんなわかりきったことを
マウントとりたがりすぎ
マウントとりたがりすぎ
2021/09/01(水) 03:42:36.41
2021/09/01(水) 11:21:33.57
間違った指摘してたくせにw
何で常時偉そうにしなきゃならんのだかだが、自覚ないアホか
何で常時偉そうにしなきゃならんのだかだが、自覚ないアホか
2021/09/02(木) 16:02:37.40
コマンド展開で質問。
echo $(...) | sed ...
みたいなスクリプトで、$(...)内のコマンドが失敗したとき、そこでエラー終了してほしいんだけど、ムリ?
set -eしても、これには効果がないもよう。
echo $(...) | sed ...
みたいなスクリプトで、$(...)内のコマンドが失敗したとき、そこでエラー終了してほしいんだけど、ムリ?
set -eしても、これには効果がないもよう。
2021/09/02(木) 17:36:39.83
コマンド置換ではムリだねえ
2021/09/02(木) 17:47:03.78
>コマンド置換ではムリだねえ
コマンドの引数にあるのはね
コマンド置換でも変数に入れるだけなら終了ステータス返る/見れる=-eなら止まる。そっちはやってるとかあるだろうけど、いちおう
コマンドの引数にあるのはね
コマンド置換でも変数に入れるだけなら終了ステータス返る/見れる=-eなら止まる。そっちはやってるとかあるだろうけど、いちおう
2021/09/03(金) 12:16:10.43
え?馬鹿なの?
var=$(...)
echo "$var" | sed ...
ってするだけじゃん
var=$(...)
echo "$var" | sed ...
ってするだけじゃん
2021/09/03(金) 12:25:07.03
すでにそう書かれてるだろうに
2021/09/03(金) 12:30:46.29
流れとか関係なくどこまで知っているのか想定もせず、
偉ぶれると思ったら食いつくいつもの馬鹿だろな
偉ぶれると思ったら食いつくいつもの馬鹿だろな
2021/09/03(金) 12:47:59.60
口は悪いけどみんなと仲良くしたいだけなんです大目に見てあげてください
2021/09/03(金) 12:51:54.14
>>470
おまえこそ、いつものマウンターマウンターだな。w
おまえこそ、いつものマウンターマウンターだな。w
2021/09/03(金) 13:51:00.00
>>471
そうでもないそうではないようだけどw
そうでもないそうではないようだけどw
2021/09/03(金) 15:15:28.44
2021/09/04(土) 07:46:40.91
だからさ、もう結論出てるんだよ
var=$(...)
echo "$var" | sed ...
こう書けば終わり
var=$(...)
echo "$var" | sed ...
こう書けば終わり
2021/09/05(日) 01:55:02.26
きも
2021/09/08(水) 16:22:00.10
sedのホールドスペースは、その内容を削除するにはどうすれば?
とりあえずs/.//g;xでできたけど、もっと直接的なやりかたはないんかなー、と。
とりあえずs/.//g;xでできたけど、もっと直接的なやりかたはないんかなー、と。
2021/09/08(水) 16:43:31.22
2021/09/08(水) 17:50:14.30
おう
2021/09/27(月) 09:26:46.66
怪しげなシェル芸が宣伝中
【広告記事】今、ユニケージ開発手法にギークが熱狂するワケ【USP研究所代表&オープンソースOSコミッター対談】
ttps://type.jp/et/feature/14070/
【広告記事】今、ユニケージ開発手法にギークが熱狂するワケ【USP研究所代表&オープンソースOSコミッター対談】
ttps://type.jp/et/feature/14070/
2021/11/03(水) 02:25:59.11
空白行でいくつかのブロックに分割されたテキストにて、
文字列にマッチするブロックを出力する方法を探してます
たとえば
111
222
222
aaa
222
333
333
333
のようなテキスト中から、aaaを検索した際に、その前後の空白行に囲まれたブロックである
222
222
aaa
222
という結果を得たいです
いまは最初にブロックごとに一時ファイルを作り、それぞれに対してgrepにて検索し
マッチしたファイルを出力、としているのですがブロックが20万ほどあり、
分割も検索も遅くて困ってます
該当するブロックは3〜5個程度なので、むしろgrepでマッチする行番号を調べる
→テキストをless等でひらき該当行へジャンプ
→そのブロックをコピペ
の方が早いくらいでして
文字列にマッチするブロックを出力する方法を探してます
たとえば
111
222
222
aaa
222
333
333
333
のようなテキスト中から、aaaを検索した際に、その前後の空白行に囲まれたブロックである
222
222
aaa
222
という結果を得たいです
いまは最初にブロックごとに一時ファイルを作り、それぞれに対してgrepにて検索し
マッチしたファイルを出力、としているのですがブロックが20万ほどあり、
分割も検索も遅くて困ってます
該当するブロックは3〜5個程度なので、むしろgrepでマッチする行番号を調べる
→テキストをless等でひらき該当行へジャンプ
→そのブロックをコピペ
の方が早いくらいでして
2021/11/03(水) 02:48:59.29
Linux板くだ質スレでいい加減嫌われたから流れてきたって感じかな
> ブロックが20万ほどあり
この時点でデータ構造の方を考え直すべき
> ブロックが20万ほどあり
この時点でデータ構造の方を考え直すべき
2021/11/03(水) 06:26:04.06
\n\n(\n...)ではない \nをスペース(やタブなど)に | grep '\<aaa\>' | スペース(やタブなどにしたの)を\nに
2021/11/03(水) 09:59:44.46
テキトーに色々
$ for i in {1..2000000}; do echo aaaa; echo bbbb; echo cccc; echo $i; echo dddd; echo eeee; echo ffff; echo gggg; echo; done > aaa
$ time (awk 'function keepp () { if (matched) { for (i=0 ; i < nkeeps ; i++) print keeps[i]; print } matched=0; nkeeps=0 } NF == 0 { keepp(); next } { keeps[nkeeps++]=$0; if ($1 == "1414213") matched=1 } END{ keepp() }' < aaa )
real 0m10.556s
user 0m10.281s
sys 0m0.271s
$ time (awk 'NF == 0 { print; next } { printf "%s ", $0 }' < aaa | grep '\<1414213\>' | tr ' ' '\n')
real 0m11.101s
user 0m1.177s
sys 0m12.259s
$ time (tr '\n' ' ' < aaa | sed -e 's/ /\
/g' | grep '\<1414213\>' | tr ' ' '\n')
real 0m2.344s
user 0m1.452s
sys 0m0.814s
$ time (tr '\n' ' ' < aaa | sed -e 's/ */\
/g' | grep '\<1414213\>' | tr ' ' '\n')
real 0m3.678s
user 0m1.484s
sys 0m1.078s
$ for i in {1..2000000}; do echo aaaa; echo bbbb; echo cccc; echo $i; echo dddd; echo eeee; echo ffff; echo gggg; echo; done > aaa
$ time (awk 'function keepp () { if (matched) { for (i=0 ; i < nkeeps ; i++) print keeps[i]; print } matched=0; nkeeps=0 } NF == 0 { keepp(); next } { keeps[nkeeps++]=$0; if ($1 == "1414213") matched=1 } END{ keepp() }' < aaa )
real 0m10.556s
user 0m10.281s
sys 0m0.271s
$ time (awk 'NF == 0 { print; next } { printf "%s ", $0 }' < aaa | grep '\<1414213\>' | tr ' ' '\n')
real 0m11.101s
user 0m1.177s
sys 0m12.259s
$ time (tr '\n' ' ' < aaa | sed -e 's/ /\
/g' | grep '\<1414213\>' | tr ' ' '\n')
real 0m2.344s
user 0m1.452s
sys 0m0.814s
$ time (tr '\n' ' ' < aaa | sed -e 's/ */\
/g' | grep '\<1414213\>' | tr ' ' '\n')
real 0m3.678s
user 0m1.484s
sys 0m1.078s
2021/11/03(水) 10:06:32.55
$ time sh smf1.sh
real 0m4.088s
user 0m2.324s
sys 0m3.803s
$ cat smf1.sh
#!/bin/sh
SMF=/tmp/xxx
[ ! -x $SMF ] && { cc -x c - -o $SMF << 'EOS'
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
const size_t BUFFER_SIZE = 1024 * 1024 + 1;
char *buffer = (char *)malloc(BUFFER_SIZE);
while (fgets(buffer, BUFFER_SIZE, stdin) != NULL) {
char *ep = buffer + strlen(buffer) - 1;
if (ep >= buffer && *ep == '\n')
*ep = '\0';
if (buffer[0] == '\0')
putc('\n', stdout);
else
printf("%s ", buffer);
}
return 0;
}
EOS
[ $? -ne 0 ] && exit 1; }
$SMF < aaa | grep '\<1414213\>' | tr ' ' '\n'
real 0m4.088s
user 0m2.324s
sys 0m3.803s
$ cat smf1.sh
#!/bin/sh
SMF=/tmp/xxx
[ ! -x $SMF ] && { cc -x c - -o $SMF << 'EOS'
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
const size_t BUFFER_SIZE = 1024 * 1024 + 1;
char *buffer = (char *)malloc(BUFFER_SIZE);
while (fgets(buffer, BUFFER_SIZE, stdin) != NULL) {
char *ep = buffer + strlen(buffer) - 1;
if (ep >= buffer && *ep == '\n')
*ep = '\0';
if (buffer[0] == '\0')
putc('\n', stdout);
else
printf("%s ", buffer);
}
return 0;
}
EOS
[ $? -ne 0 ] && exit 1; }
$SMF < aaa | grep '\<1414213\>' | tr ' ' '\n'
2021/11/03(水) 10:07:40.48
$ time sh smf2.sh
real 0m0.717s
user 0m0.381s
sys 0m0.436s
#!/bin/sh
SMF=/tmp/xxx
[ ! -x $SMF ] && { cc -x c - -o $SMF << 'EOS'
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
const size_t BUFFER_SIZE = 1024 * 1024;
char *srcbuff = (char *)malloc(BUFFER_SIZE);
char *dstbuff = (char *)malloc(BUFFER_SIZE+1);
char *const de = dstbuff + BUFFER_SIZE - 1;
int numLFs = 0;
size_t len;
while ((len = fread(srcbuff, 1, BUFFER_SIZE, stdin)) > 0) {
char *sp = srcbuff;
char *const sep = sp + len - 1;
char *dp = dstbuff;
char c;
while (sp <= sep) {
if ((c = *(sp++)) == '\n')
numLFs++;
else{
if (numLFs > 1)
*(dp++) = '\n';
else if (numLFs == 1)
real 0m0.717s
user 0m0.381s
sys 0m0.436s
#!/bin/sh
SMF=/tmp/xxx
[ ! -x $SMF ] && { cc -x c - -o $SMF << 'EOS'
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
const size_t BUFFER_SIZE = 1024 * 1024;
char *srcbuff = (char *)malloc(BUFFER_SIZE);
char *dstbuff = (char *)malloc(BUFFER_SIZE+1);
char *const de = dstbuff + BUFFER_SIZE - 1;
int numLFs = 0;
size_t len;
while ((len = fread(srcbuff, 1, BUFFER_SIZE, stdin)) > 0) {
char *sp = srcbuff;
char *const sep = sp + len - 1;
char *dp = dstbuff;
char c;
while (sp <= sep) {
if ((c = *(sp++)) == '\n')
numLFs++;
else{
if (numLFs > 1)
*(dp++) = '\n';
else if (numLFs == 1)
2021/11/03(水) 10:07:44.97
*(dp++) = ' ';
numLFs = 0;
*(dp++) = c;
}
}
fwrite(dstbuff, 1, (size_t)(dp - dstbuff), stdout);
}
return 0;
}
EOS
[ $? -ne 0 ] && exit 1; }
$SMF < aaa | grep '\<1414213\>' | tr ' ' '\n'
numLFs = 0;
*(dp++) = c;
}
}
fwrite(dstbuff, 1, (size_t)(dp - dstbuff), stdout);
}
return 0;
}
EOS
[ $? -ne 0 ] && exit 1; }
$SMF < aaa | grep '\<1414213\>' | tr ' ' '\n'
2021/11/04(木) 20:48:41.95
481です
いろいろな方法について情報ありがとうございます
参考にさせていただき、取り入れていこうと思います
いろいろな方法について情報ありがとうございます
参考にさせていただき、取り入れていこうと思います
2021/11/19(金) 02:41:59.96
特定の文字列で始まるファイルが存在するかの判断はどうすればいいでしょうか
ぐぐって見つけた ls を使う方法
if ls $f* > /dev/null 2>&1
then
echo $f で始まるファイルがあります
fi
だと該当ファイルが存在しない場合に
...にアクセスできません: そのようなファイルやディレクトリはありません
というエラーメッセージが表示されます。
また、
for g in $f* ; do
echo $f で始まるファイル $g があります
done
だと該当ファイルがない場合でもループの中に入ってしまいます。
ぐぐって見つけた ls を使う方法
if ls $f* > /dev/null 2>&1
then
echo $f で始まるファイルがあります
fi
だと該当ファイルが存在しない場合に
...にアクセスできません: そのようなファイルやディレクトリはありません
というエラーメッセージが表示されます。
また、
for g in $f* ; do
echo $f で始まるファイル $g があります
done
だと該当ファイルがない場合でもループの中に入ってしまいます。
2021/11/19(金) 03:28:14.33
find使うのはスクリプトじゃないから関係ないか
2021/11/19(金) 10:37:01.91
2021/11/19(金) 10:51:08.20
>>489
あと、forの場合は、シェルが対象がなくてglob展開できない場合はglobそのままの値となる。forの場合に限らずglobはそういうもの
for g in $f*
の場合は、g が $f* になるので、展開されずにそのままなのかチェックするのは必要
for g in $f*; do
[ "$g" = "$f*" ] && { echo 展開できませんでした; break; }
な感じで
あと、forの場合は、シェルが対象がなくてglob展開できない場合はglobそのままの値となる。forの場合に限らずglobはそういうもの
for g in $f*
の場合は、g が $f* になるので、展開されずにそのままなのかチェックするのは必要
for g in $f*; do
[ "$g" = "$f*" ] && { echo 展開できませんでした; break; }
な感じで
2021/11/19(金) 11:01:48.57
>forの場合に限らずglobはそういうもの
なので、
if [ "$(echo $f*)" != "$f*" ]
then
echo $f で始まるファイルがあります
fi
とかとも書ける
zshでnomatchだと余計なメッセージが出るし、>>489のls使ってる方が見た目なにしたいのかわかりやすいと思うけど、いちおう
なので、
if [ "$(echo $f*)" != "$f*" ]
then
echo $f で始まるファイルがあります
fi
とかとも書ける
zshでnomatchだと余計なメッセージが出るし、>>489のls使ってる方が見た目なにしたいのかわかりやすいと思うけど、いちおう
2021/11/19(金) 11:07:42.62
2021/11/19(金) 12:04:30.54
zshネタ、シェルスクリプトではなくて zsh script になってしまうが
null_glob
ってのもあるんだな
setopt null_glob
ってすると、エラーメッセージは出ないわ、globに当てはまらない場合globを入れない/消すわで、>>489のどっちも動くようになるな
そんな応えは求めてないだろうけどw
null_glob
ってのもあるんだな
setopt null_glob
ってすると、エラーメッセージは出ないわ、globに当てはまらない場合globを入れない/消すわで、>>489のどっちも動くようになるな
そんな応えは求めてないだろうけどw
2021/11/19(金) 12:07:54.26
ああ、bashにもnullglobって同じようなのがあるのか
シェルスクリプトという汎用ではなく各シェル固有独特の機能なので使わないだろけど
シェルスクリプトという汎用ではなく各シェル固有独特の機能なので使わないだろけど
2021/11/19(金) 12:11:32.22
2021/11/19(金) 23:23:19.51
489です
ありがとうございます。
とても参考になりました。
ありがとうございます。
とても参考になりました。
2021/11/21(日) 19:09:01.55
コマンドの出力を(だけ)ではなく、シェルそのものの出力(=コマンドの出力もになる)を消すなら
if (exec 1>/dev/null;exec 2>&1;ls $f*); then
echo $f で始まるファイルがあります
fi
て現在のシェル環境を変更(元に戻すのが面倒なのでサブシェルでそこの環境を変更)で消すというのもできたな
if (exec 1>/dev/null;exec 2>&1;ls $f*); then
echo $f で始まるファイルがあります
fi
て現在のシェル環境を変更(元に戻すのが面倒なのでサブシェルでそこの環境を変更)で消すというのもできたな
2021/11/21(日) 19:15:56.45
>if (exec 1>/dev/null;exec 2>&1;ls $f*); then
execのディスクリプタ操作は羅列ができるようなのね
if (exec 1>/dev/null 2>&1;ls $f*); then
の方が良さげか
execのディスクリプタ操作は羅列ができるようなのね
if (exec 1>/dev/null 2>&1;ls $f*); then
の方が良さげか
2021/11/21(日) 22:35:21.95
>>489
check() {
set -- "$1"*
[ -e "$1" ]
}
最短だとこうかな?
set -- "$1"* でシェルのglob展開を用いて位置パラメーターにセットする
ファイルが見つかった場合、そのファイル名が$1に入る
ファイルが見つからなかった場合、"$1"*という文字列が入る
まずありえないとは思うけど"$1*"という名前にアスタリスクが含まれた
ファイルがある可能性を考えると>>492よりも-eでチェックした方が良い
と>>494で書いてあったかw
>>493
> >>489のls使ってる方が見た目なにしたいのかわかりやすいと思うけど
ls $f* は意味がない。シェルのglob展開されてからlsを実行してる。
つまりls file1 file2 file3 のようなものを実行してるだけ。
呼び出す前にすでにファイル一覧を取得してる
単に呼び出しコストが高い[ -e ] になってる
check() {
set -- "$1"*
[ -e "$1" ]
}
最短だとこうかな?
set -- "$1"* でシェルのglob展開を用いて位置パラメーターにセットする
ファイルが見つかった場合、そのファイル名が$1に入る
ファイルが見つからなかった場合、"$1"*という文字列が入る
まずありえないとは思うけど"$1*"という名前にアスタリスクが含まれた
ファイルがある可能性を考えると>>492よりも-eでチェックした方が良い
と>>494で書いてあったかw
>>493
> >>489のls使ってる方が見た目なにしたいのかわかりやすいと思うけど
ls $f* は意味がない。シェルのglob展開されてからlsを実行してる。
つまりls file1 file2 file3 のようなものを実行してるだけ。
呼び出す前にすでにファイル一覧を取得してる
単に呼び出しコストが高い[ -e ] になってる
2021/11/21(日) 23:15:10.23
見た目っ言ってるだろ
そんなコスト気にする必要もないから、見た目とそっちの方を重視してだよ
そんなコスト気にする必要もないから、見た目とそっちの方を重視してだよ
2021/11/21(日) 23:18:58.18
他人の提案を直接ダメ出しして自分の知識自慢をしたがり、
マウント取るのが目的なやつは他のシェルスクリプトスレでも居るけど、
同じやつかな
マウント取るのが目的なやつは他のシェルスクリプトスレでも居るけど、
同じやつかな
2021/11/21(日) 23:19:33.52
lsの見た目の何がいいの?
ファイルリストを取得しても何やってるのか意味わからんでしょ
ファイルリストを取得しても何やってるのか意味わからんでしょ
2021/11/21(日) 23:20:38.15
2021/11/21(日) 23:21:00.73
lsはファイルがあるか確認するのに普通に使ってるだろ、手打ちで
2021/11/21(日) 23:22:25.30
2021/11/21(日) 23:31:25.93
でたw
自分が説明できてないだけなのに
裏が読めてないと相手のせいにする
詐欺師の手段と同じ
自分が説明できてないだけなのに
裏が読めてないと相手のせいにする
詐欺師の手段と同じ
2021/11/21(日) 23:34:45.43
自分にある意味ダメ出しされたらイキリマ来るくせに。変なやつ
説明できないとか似たようなフレーズはあいつもすぐにしてたなあ
巣に帰れよw
説明できないとか似たようなフレーズはあいつもすぐにしてたなあ
巣に帰れよw
2021/11/21(日) 23:40:47.87
「裏を読めない」と言った時点で
自分で書いてないって言ってるのってわかってないのかな?
思い込み激しすぎるんだよな
例のPOSIX原理主義者みたいだw
自分で書いてないって言ってるのってわかってないのかな?
思い込み激しすぎるんだよな
例のPOSIX原理主義者みたいだw
2021/11/21(日) 23:46:30.79
読めませんでしたと素直に言えよ
わざわざ見た目って言ってるのはなんなのかは、細かいこと言うなら、
また、そこまで食い下がるならそれぐらい裏読めよ
せめて、読めませんでしたと素直になれよ。他人にダメ出しばっかしてないで
自分にダメ出しされたらイキリまくるくせに、他人にダメ出しはするって、
マジでマウント取るのが目的でしかないだろう
マウント取るためだから素直には人の言うことは読めないから、
イキリまくることになるんだろうなと
そのしつこさはやはりなっていう
マウント取るためだからしつこく食い下がるんだろうなあ...
わざわざ見た目って言ってるのはなんなのかは、細かいこと言うなら、
また、そこまで食い下がるならそれぐらい裏読めよ
せめて、読めませんでしたと素直になれよ。他人にダメ出しばっかしてないで
自分にダメ出しされたらイキリまくるくせに、他人にダメ出しはするって、
マジでマウント取るのが目的でしかないだろう
マウント取るためだから素直には人の言うことは読めないから、
イキリまくることになるんだろうなと
そのしつこさはやはりなっていう
マウント取るためだからしつこく食い下がるんだろうなあ...
2021/11/22(月) 00:00:02.71
書いてないものは読めません
アホすぎる
アホすぎる
2021/11/22(月) 00:00:26.12
POSIX原理主義者って本当みたいだなw
2021/11/22(月) 00:02:28.08
書いてないものは読めません
って短絡的に言えちゃうのは確かにアホだな、それが攻撃的な人格のヤツがなら
って短絡的に言えちゃうのは確かにアホだな、それが攻撃的な人格のヤツがなら
2021/11/22(月) 00:08:40.31
>>513
自らアホ晒してるだけだぞ
なんでPOSIX原理主義者に結びつけるのか意味わからん
もちろんあんな自ら手足縛るのは嫌いだ/必要ないし、イキってる姿勢はもっと嫌いだし
ホント短絡的だな。トンチンカンな決めつけばかりって何したいんだか
自らアホ晒してるだけだぞ
なんでPOSIX原理主義者に結びつけるのか意味わからん
もちろんあんな自ら手足縛るのは嫌いだ/必要ないし、イキってる姿勢はもっと嫌いだし
ホント短絡的だな。トンチンカンな決めつけばかりって何したいんだか
2021/11/22(月) 00:09:15.81
説明不足を他人のせいにするのが流行ってるの?
2021/11/22(月) 00:10:39.73
相手によるだろう
2021/11/22(月) 00:16:59.61
2021/11/22(月) 00:18:57.19
また思い込みで語ってるw
2021/11/22(月) 00:23:14.57
2021/11/22(月) 00:29:52.48
俺がPOSIX原理主義者だとしたいなら、
POSIX原理主義者のくせに知識不足でマウント取られた恨みがあるから
かな
だとしてもPOSIX原理主義者に結びつける説明にはなってないなあ
カオスだな。ここまでにしとこか
POSIX原理主義者のくせに知識不足でマウント取られた恨みがあるから
かな
だとしてもPOSIX原理主義者に結びつける説明にはなってないなあ
カオスだな。ここまでにしとこか
2021/11/22(月) 02:10:39.67
2021/11/22(月) 02:11:59.82
>>520
510には「POSIX原理主義者」に知識不足でマウント取られた過去があって
恨みがあるから「POSIX原理主義者」という言葉を持ち出した
ってことでしょ
510がマウントとられてぐぬぬとなった時に、510には相手がPOSIX原理主義者のように思えたらしいというだけで
本当にPOSIX原理主義者かどうかさえ不明だし、誰がPOSIX原理主義者かなんてどうでもいい
510には「POSIX原理主義者」に知識不足でマウント取られた過去があって
恨みがあるから「POSIX原理主義者」という言葉を持ち出した
ってことでしょ
510がマウントとられてぐぬぬとなった時に、510には相手がPOSIX原理主義者のように思えたらしいというだけで
本当にPOSIX原理主義者かどうかさえ不明だし、誰がPOSIX原理主義者かなんてどうでもいい
2021/11/22(月) 02:13:47.43
>>522
言語新作は病気だよ
言語新作は病気だよ
2021/11/22(月) 03:28:05.45
>>523
無理があるだろう
無理があるだろう
2021/12/11(土) 11:26:25.87
fishについて質問です
fish_vi_key_bindingsを入力するとviモードに入りプロンプトの左にモードステイタスが表示されますが、
$XDG_CONFIG_HOME/fish/config.fish にfish_vi_key_bindingsを記入した場合はログイン後すぐにviモードか使えますがモードステイタスが表示されません
どうやったら表示出来ますか?
fish_vi_key_bindingsを入力するとviモードに入りプロンプトの左にモードステイタスが表示されますが、
$XDG_CONFIG_HOME/fish/config.fish にfish_vi_key_bindingsを記入した場合はログイン後すぐにviモードか使えますがモードステイタスが表示されません
どうやったら表示出来ますか?
2021/12/11(土) 13:46:58.57
fish_prompt
2021/12/11(土) 13:48:39.11
fish_mode_prompt
2021/12/11(土) 13:49:12.15
を、$XDG_CONFIG_HOME/fish/config.fish に書いてるんじゃないの
2021/12/11(土) 15:39:24.15
>>529
どうもありがとうございます
それらは書かれていませんが、こう書かれてありましたのでコメントアウトしてみたらモードが表示されるようになりました
function hybrid_bindings --description "Vi-style bindings that inherit emacs-style bindings in all modes"
for mode in insert default visual
fish_default_key_bindings -M $mode
end
fish_vi_key_bindings --no-erase
end
set -g fish_key_bindings hybrid_bindings
どうもありがとうございます
それらは書かれていませんが、こう書かれてありましたのでコメントアウトしてみたらモードが表示されるようになりました
function hybrid_bindings --description "Vi-style bindings that inherit emacs-style bindings in all modes"
for mode in insert default visual
fish_default_key_bindings -M $mode
end
fish_vi_key_bindings --no-erase
end
set -g fish_key_bindings hybrid_bindings
2021/12/11(土) 15:48:57.02
インサートモードの時にjjを押したらノーマルモードに戻りたくてfish_user_key_bindingsに以下のように書いたらまたモードが消えました
function fish_user_key_bindings
fish_vi_key_bindings
bind -M insert -m default jj backward-char force-repaint
end
function fish_user_key_bindings
fish_vi_key_bindings
bind -M insert -m default jj backward-char force-repaint
end
2022/02/26(土) 23:09:30.57
端末では正常な
$declare -i w0=180 w1=30 w2=20 w3=50 ; w3=w3+(w0-w1)/10-1 ; echo $w3
ですが、shファイルで使うとなぜかエラーになります。(w? の数値は違います)
予期しないトークン `(' 周辺に構文エラーがあります w3=w3+(w0-w1)/10-1
ですが、分割すると通ります。
w2=(w0-w1)/10 ; w3=w3+w2-1
理由をご存知でしたら教えて下さい。
GNU bash, バージョン 5.0.17(1)
$declare -i w0=180 w1=30 w2=20 w3=50 ; w3=w3+(w0-w1)/10-1 ; echo $w3
ですが、shファイルで使うとなぜかエラーになります。(w? の数値は違います)
予期しないトークン `(' 周辺に構文エラーがあります w3=w3+(w0-w1)/10-1
ですが、分割すると通ります。
w2=(w0-w1)/10 ; w3=w3+w2-1
理由をご存知でしたら教えて下さい。
GNU bash, バージョン 5.0.17(1)
533名無しさん@お腹いっぱい。
2022/02/27(日) 07:10:41.81 >>532
理由はよく分からないけど extglob が on ならエラーにならないね
理由はよく分からないけど extglob が on ならエラーにならないね
2022/02/27(日) 09:42:18.76
>>532
シバンでググれ
シバンでググれ
2022/02/27(日) 19:45:20.55
なんかbashの仕様のグダグダなところを踏んだって感じだな。
エスケープされていない生の ( は基本的にwordの途中に出てこないので、
w3+( ときたところでsyntax errorになる。
ところが、shopt -s extglob しておくと、
+(hoge|fuga) みたいなパターンマッチを許すため、
w3+( をエラー扱いできなくなり、全部まとめて数式としてパースしてくれる。
*( も可。しかし、/( と -( は不可。
おとなしく $(( )) を使っておくのが吉。
エスケープされていない生の ( は基本的にwordの途中に出てこないので、
w3+( ときたところでsyntax errorになる。
ところが、shopt -s extglob しておくと、
+(hoge|fuga) みたいなパターンマッチを許すため、
w3+( をエラー扱いできなくなり、全部まとめて数式としてパースしてくれる。
*( も可。しかし、/( と -( は不可。
おとなしく $(( )) を使っておくのが吉。
2022/02/28(月) 06:45:21.62
自分が理解できないからって
bashのせいにするのは恥ずかしい行為
bashのせいにするのは恥ずかしい行為
2022/03/08(火) 18:54:54.29
grepとかで使える正規表現の「\s」は、manページのどこに書いてますか?
「\b」「\w」は、man 1 grepに書いてあるけど、「\s」は見当たらない。
「\b」「\w」は、man 1 grepに書いてあるけど、「\s」は見当たらない。
2022/03/10(木) 22:56:33.04
declare -i n; n="3/2" は通るのに、n="1.5" が通らないのはなぜだろ
2022/03/10(木) 23:31:05.02
エラーで出ている通り、
リテラルもintegerしかでintegerでは.(5) というのは数値はあり得ない
数値の一部ではないので算術演算子とみるが、算術演算子としてもそんなのない
てとこかな
リテラルもintegerしかでintegerでは.(5) というのは数値はあり得ない
数値の一部ではないので算術演算子とみるが、算術演算子としてもそんなのない
てとこかな
2022/03/10(木) 23:46:00.98
2022/03/11(金) 00:08:44.90
>>540,537
いや、POSIXのドキュメントには無いな
個々の実装での気まぐれmanに記載のないのは記載漏れかな
使えるかどうかは試してみなければわからない、使えるのも多いだろうけど
自分で試して使えるなら使うなら、
https://en.wikipedia.org/wiki/Regular_expression
https://www.boost.org/doc/libs/1_71_0/libs/regex/doc/html/boost_regex/syntax/basic_extended.html
とか、manではなくPOSIXのでもなく他の資料を当たるしかないかな
いや、POSIXのドキュメントには無いな
個々の実装での気まぐれmanに記載のないのは記載漏れかな
使えるかどうかは試してみなければわからない、使えるのも多いだろうけど
自分で試して使えるなら使うなら、
https://en.wikipedia.org/wiki/Regular_expression
https://www.boost.org/doc/libs/1_71_0/libs/regex/doc/html/boost_regex/syntax/basic_extended.html
とか、manではなくPOSIXのでもなく他の資料を当たるしかないかな
2022/03/11(金) 00:14:53.27
2022/03/11(金) 12:03:17.08
>>540-542
やっぱり記載漏れかな?
理想としては、man 7 regexくらいに全仕様がまとまっててほしいんだけどな。
個人的には、慣れで「\d」を使ってしまって、よく標準コマンド系でガッカリするんだよね。。。
やっぱり記載漏れかな?
理想としては、man 7 regexくらいに全仕様がまとまっててほしいんだけどな。
個人的には、慣れで「\d」を使ってしまって、よく標準コマンド系でガッカリするんだよね。。。
2022/03/11(金) 12:17:43.20
>>543
他の環境は知らんがGNUのなら仕様はinfoを読めというスタンスだぞ
他の環境は知らんがGNUのなら仕様はinfoを読めというスタンスだぞ
2022/03/11(金) 16:00:00.94
>>544
たしかにinfo grepには「\s」が書いてあるな。
でもinfo bashには書かれてなくて、man 3 regexに回されてるような。
結局はinfoでも解決しなさそうな気がするんだけど、違う?
info regexだとlibc関数のことが表示されるし、たとえばman 7 regexに相当するinfoは存在しないんでは?
まあ、man7セクションに入るような内容はGNUに関係なさそうだとは思う。
たしかにinfo grepには「\s」が書いてあるな。
でもinfo bashには書かれてなくて、man 3 regexに回されてるような。
結局はinfoでも解決しなさそうな気がするんだけど、違う?
info regexだとlibc関数のことが表示されるし、たとえばman 7 regexに相当するinfoは存在しないんでは?
まあ、man7セクションに入るような内容はGNUに関係なさそうだとは思う。
546あぼーん
NGNGあぼーん
2022/05/12(木) 22:19:26.11
シェルスクリプトの [ -a (AND) と -o (OR) ] は非推奨だかんね
https://qiita.com/ko1nksm/items/6201b2ce47f4d6126521
には -a や -o ではなく && と || を使うように書かれています。
否定の場合、 [ $a != $b ] と [ ! $a = $b ] はどちらを使ってもいいのでしょうか?
https://qiita.com/ko1nksm/items/6201b2ce47f4d6126521
には -a や -o ではなく && と || を使うように書かれています。
否定の場合、 [ $a != $b ] と [ ! $a = $b ] はどちらを使ってもいいのでしょうか?
2022/05/13(金) 01:22:03.48
2022/05/13(金) 16:01:08.55
2022/05/14(土) 23:52:35.51
昔のFreeBSDでは
[ -n abc -lt 5 ]
みたいのが通った記憶
[ gnu 8.30で今試すとextra argument '['
と怒られる
手元のunix magazineコレクション(1997-2000)にもこの用法が述べられてるが、まあ要らん機能だわな
[ -n abc -lt 5 ]
みたいのが通った記憶
[ gnu 8.30で今試すとextra argument '['
と怒られる
手元のunix magazineコレクション(1997-2000)にもこの用法が述べられてるが、まあ要らん機能だわな
2022/05/15(日) 03:02:55.37
シェルスクリプトって息が長いから
そういう使うべきじゃないものも残っていて困るね
さすがに古すぎる機能は互換性切り捨てた方が良くない?
そういう使うべきじゃないものも残っていて困るね
さすがに古すぎる機能は互換性切り捨てた方が良くない?
2022/05/15(日) 12:09:01.91
whileの、条件が偽でも一度はループって仕様が不思議
2022/05/15(日) 15:51:51.12
そんな仕様なんて無いし
シェルスクリプトに文句言ってるやつの8割は
自分の知らない言語を勉強せずに文句言ってるだけなんだなってわかる
シェルスクリプトに文句言ってるやつの8割は
自分の知らない言語を勉強せずに文句言ってるだけなんだなってわかる
2022/05/15(日) 17:54:30.30
do while をシェルスクリプトでどう実現するかって話もWeb上であるけど、
それなんの話ってことになるわな
それなんの話ってことになるわな
2022/05/23(月) 13:54:54.31
ぐぐっても見つけられないんだけど
functionの中のlocal変数に整数属性付与って出来ないのかな?
functionの中のlocal変数に整数属性付与って出来ないのかな?
2022/05/23(月) 23:44:52.02
bashの話だとして普通に整数属性付いてるぞ?
bash -c 'v=1+2; foo() { local v; declare -i v; v=3+4; echo $v; }; foo; echo $v'
7
1+2
というかdeclareで-gをつけない限り
デフォルトでlocalになるだろ?
bash -c 'v=1+2; foo() { local v; declare -i v; v=3+4; echo $v; }; foo; echo $v'
7
1+2
というかdeclareで-gをつけない限り
デフォルトでlocalになるだろ?
2022/05/24(火) 01:33:27.87
ぐぐるな!
黙って
man sh
黙って
man sh
2022/05/24(火) 17:18:15.58
2022/05/25(水) 00:13:58.24
3つの引数を必要とする関数があります。
x=$1 y=$2 ANS=$3の絶対値
$3が正の場合はxを、負の場合はyを増減し、xとyとで算出される結果がANSになった時のxまたはyを返します。
x=a[0] y=a[1]とし、最初に$3の符号で添字を0または1に設定することでループ内での場合分けを減らしたいと思います。
質問:整数配列の宣言はできますか?
x=$1 y=$2 ANS=$3の絶対値
$3が正の場合はxを、負の場合はyを増減し、xとyとで算出される結果がANSになった時のxまたはyを返します。
x=a[0] y=a[1]とし、最初に$3の符号で添字を0または1に設定することでループ内での場合分けを減らしたいと思います。
質問:整数配列の宣言はできますか?
2022/05/25(水) 01:04:48.10
2022/05/25(水) 01:06:31.16
>>559
昨日、近所の吉野家行ったんです。吉野家。
そしたらなんか人がめちゃくちゃいっぱいで座れないんです。
で、よく見たらなんか垂れ幕下がってて、150円引き、とか書いてあるんです。
もうね、アホかと。馬鹿かと。
お前らな、150円引き如きで普段来てない吉野家に来てんじゃねーよ、ボケが。
150円だよ、150円。
なんか親子連れとかもいるし。一家4人で吉野家か。おめでてーな。
よーしパパ特盛頼んじゃうぞー、とか言ってるの。もう見てらんない。
お前らな、150円やるからその席空けろと。
吉野家ってのはな、もっと殺伐としてるべきなんだよ。
Uの字テーブルの向かいに座った奴といつ喧嘩が始まってもおかしくない、
刺すか刺されるか、そんな雰囲気がいいんじゃねーか。女子供は、すっこんでろ。
で、やっと座れたかと思ったら、隣の奴が、大盛つゆだくで、とか言ってるんです。
そこでまたぶち切れですよ。
あのな、つゆだくなんてきょうび流行んねーんだよ。ボケが。
得意げな顔して何が、つゆだくで、だ。
お前は本当につゆだくを食いたいのかと問いたい。問い詰めたい。小1時間問い詰めたい。
お前、つゆだくって言いたいだけちゃうんかと。
吉野家通の俺から言わせてもらえば今、吉野家通の間での最新流行はやっぱり、
ねぎだく、これだね。
大盛りねぎだくギョク。これが通の頼み方。
ねぎだくってのはねぎが多めに入ってる。そん代わり肉が少なめ。これ。
で、それに大盛りギョク(玉子)。これ最強。
しかしこれを頼むと次から店員にマークされるという危険も伴う、諸刃の剣。
素人にはお薦め出来ない。
まあお前らド素人は、牛鮭定食でも食ってなさいってこった。
答え:できまsん
昨日、近所の吉野家行ったんです。吉野家。
そしたらなんか人がめちゃくちゃいっぱいで座れないんです。
で、よく見たらなんか垂れ幕下がってて、150円引き、とか書いてあるんです。
もうね、アホかと。馬鹿かと。
お前らな、150円引き如きで普段来てない吉野家に来てんじゃねーよ、ボケが。
150円だよ、150円。
なんか親子連れとかもいるし。一家4人で吉野家か。おめでてーな。
よーしパパ特盛頼んじゃうぞー、とか言ってるの。もう見てらんない。
お前らな、150円やるからその席空けろと。
吉野家ってのはな、もっと殺伐としてるべきなんだよ。
Uの字テーブルの向かいに座った奴といつ喧嘩が始まってもおかしくない、
刺すか刺されるか、そんな雰囲気がいいんじゃねーか。女子供は、すっこんでろ。
で、やっと座れたかと思ったら、隣の奴が、大盛つゆだくで、とか言ってるんです。
そこでまたぶち切れですよ。
あのな、つゆだくなんてきょうび流行んねーんだよ。ボケが。
得意げな顔して何が、つゆだくで、だ。
お前は本当につゆだくを食いたいのかと問いたい。問い詰めたい。小1時間問い詰めたい。
お前、つゆだくって言いたいだけちゃうんかと。
吉野家通の俺から言わせてもらえば今、吉野家通の間での最新流行はやっぱり、
ねぎだく、これだね。
大盛りねぎだくギョク。これが通の頼み方。
ねぎだくってのはねぎが多めに入ってる。そん代わり肉が少なめ。これ。
で、それに大盛りギョク(玉子)。これ最強。
しかしこれを頼むと次から店員にマークされるという危険も伴う、諸刃の剣。
素人にはお薦め出来ない。
まあお前らド素人は、牛鮭定食でも食ってなさいってこった。
答え:できまsん
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 事実上の減反政策を法定化へ 農水省方針 「需要に応じた生産」推進 [蚤の市★]
- フジテレビ F1地上波放送11年ぶり復活へ 26年シーズンから最大5戦 [征夷大将軍★]
- 「超富裕層」への追加課税の対象拡大、現行の所得30億円の引き下げで調整 -1億円の壁」是正狙い [蚤の市★]
- 【高知】小学校の教員採用、合格者の約6割が辞退 高知県教委、追加選考へ [七波羅探題★]
- 中国外務省「絶対に受け入れない」改めて撤回求める 台湾有事めぐる高市総理の「政府の立場に変更なし」との答弁に対し★3 [ぐれ★]
- 【ビルボード 2025年 年間Artist 100】Mrs. GREEN APPLEが史上初の2連覇を達成(コメントあり) [湛然★]
- 伊藤園が値上げへ。お茶や野菜系飲料を中心に大幅値上げ [359572271]
- 高市ジャップ、デザイナーベビー禁止へwwww [888298477]
- 【悲報】草間リチャードさん、心の病は同性愛ミュージカル出演による過労のせいだった
- ネトウヨ「今ならまだ中国に勝てる!台湾に積極的に介入し、第三次世界大戦の戦勝国になろう!中国を叩き潰せ!」→5万いいね [314039747]
- 埼玉県に行った [793051416]
- 令和日本人「スカッとするから戦争賛成」👈なぜこんな有様になったの(´・ω・`) [399259198]
