22/05/24 17:18:15.58 .net
>>560
ありがとうございます。
declare はスクリプトファイルの先頭でしか使ったことがなかったのでループ内(や関数)でも使えるとは知りませんでした。
なるほど、それならデフォルトlocalですね。
>>561
使い方の例を見て学ぶタイプなので^^
573:名無しさん@お腹いっぱい。
22/05/25 00:13:58.24 .net
3つの引数を必要とする関数があります。
x=$1 y=$2 ANS=$3の絶対値
$3が正の場合はxを、負の場合はyを増減し、xとyとで算出される結果がANSになった時のxまたはyを返します。
x=a[0] y=a[1]とし、最初に$3の符号で添字を0または1に設定することでループ内での場合分けを減らしたいと思います。
質問:整数配列の宣言はできますか?
574:名無しさん@お腹いっぱい。
22/05/25 01:04:48.10 .net
>>562
内部的にはlocalとかreadonlyとか変数に属性つけるやつは
内部的にはdeclareかtypesetの別名
575:名無しさん@お腹いっぱい。
22/05/25 01:06:31.16 .net
>>563
昨日、近所の吉野家行ったんです。吉野家。
そしたらなんか人がめちゃくちゃいっぱいで座れないんです。
で、よく見たらなんか垂れ幕下がってて、150円引き、とか書いてあるんです。
もうね、アホかと。馬鹿かと。
お前らな、150円引き如きで普段来てない吉野家に来てんじゃねーよ、ボケが。
150円だよ、150円。
なんか親子連れとかもいるし。一家4人で吉野家か。おめでてーな。
よーしパパ特盛頼んじゃうぞー、とか言ってるの。もう見てらんない。
お前らな、150円やるからその席空けろと。
吉野家ってのはな、もっと殺伐としてるべきなんだよ。
Uの字テーブルの向かいに座った奴といつ喧嘩が始まってもおかしくない、
刺すか刺されるか、そんな雰囲気がいいんじゃねーか。女子供は、すっこんでろ。
で、やっと座れたかと思ったら、隣の奴が、大盛つゆだくで、とか言ってるんです。
そこでまたぶち切れですよ。
あのな、つゆだくなんてきょうび流行んねーんだよ。ボケが。
得意げな顔して何が、つゆだくで、だ。
お前は本当につゆだくを食いたいのかと問いたい。問い詰めたい。小1時間問い詰めたい。
お前、つゆだくって言いたいだけちゃうんかと。
吉野家通の俺から言わせてもらえば今、吉野家通の間での最新流行はやっぱり、
ねぎだく、これだね。
大盛りねぎだくギョク。これが通の頼み方。
ねぎだくってのはねぎが多めに入ってる。そん代わり肉が少なめ。これ。
で、それに大盛りギョク(玉子)。これ最強。
しかしこれを頼むと次から店員にマークされるという危険も伴う、諸刃の剣。
素人にはお薦め出来ない。
まあお前らド素人は、牛鮭定食でも食ってなさいってこった。
答え:できまsん
576:名無しさん@お腹いっぱい。
22/05/31 05:07:04.68 .net
ありがとうございます。
色々やってみたら、配列として宣言しなくても使えるようです。
declare -i i a[0] a[1] ; a[0]=3 ; a[1]=6 ; i=1 ; a[$i]=${a[$i]}+1 ; echo a=${a[$i]}
a=7
577:名無しさん@お腹いっぱい。
22/07/31 09:46:48.93 .net
ちょっとスレチかもですが、
for filename in *
とかでカレントディレクトリにあるファイル名を得る場合、どんな順番なのでしょうか?
ディレクトリエントリ順とか、ファイル名順とか。
578:名無しさん@お腹いっぱい。
22/07/31 11:17:31.68 .net
ある程度ファイルがあるところで
echo *
すればわかる
579:名無しさん@お腹いっぱい。
22/07/31 12:25:43.85 .net
>>567
お使いのシェルのマニュアル見ろってさ
URLリンク(detail.chiebukuro.yahoo.co.jp)
580:名無しさん@お腹いっぱい。
22/07/31 17:53:21.88 .net
>>567
GLOB
POSIXに規定されてる
The glob() function shall store the number of matched pathnames into pglob->gl_pathc and a pointer to a list of pointers to pathnames into pglob->gl_pathv. The pathnames shall be in sort order as defined by the current setting of the LC_COLLATE category
名前順
581:名無しさん@お腹いっぱい。
22/07/31 17:56:03.40 .net
>>570,567
SORTしないというオプションもあるが、その場合には順番の決まりなんてないということになるね
582:名無しさん@お腹いっぱい。
22/07/31 19:31:44.03 .net
質問者の使ってるシェルはposix準拠なのか
583:名無しさん@お腹いっぱい。
22/07/31 19:47:57.19 .net
>>572
> □お約束
> ・特記なき場合はBourne Shell(/bin/sh)もしくはPOSIX準拠の互換シェルがデフォルトです。
584:名無しさん@お腹いっぱい。
22/08/02 17:31:23 .net
POSIX準拠が当たり前、
POSIXにはない/POSIXで足らない勝手に拡張部分で独自が当たり前
って当たり前がわからないんだろな
拡張するにしてもPOSIXをベース+αって馬鹿でもわかりそうなもんだが
機能的に必要最低限のPOSIXを無視する利益なんてないだろに
585:名無しさん@お腹いっぱい。
22/08/02 19:09:16.74 .net
POSIXを無視する利益は互換性でしょ?
今までの動きを変えたらだめ
586:名無しさん@お腹いっぱい。
22/08/02 20:31:00.79 .net
>POSIXを無視する利益は互換性
www
>今までの動きを変えたらだめ
前段からそれになるとか無茶苦茶
POSIXの経緯、POSIXは何をベースに作られたか勉強してきてから寝言言うんだよ
587:名無しさん@お腹いっぱい。
22/08/03 09:45:22.85 .net
皆様ありがとうございました。シェルはbashです。
名前順的に最後のファイル名を得るには
for filename in * ; do
:
done
とするしかないようですね。
でもKDEのDolphineの自然なソート(ゼロパディング分の0を無視)のようなオプションは欲しいかも
588:名無しさん@お腹いっぱい。
22/08/03 14:26:27.63 .net
>>577
> 名前順的に最後のファイル名を得るには
普通に
ls -r | head -1
でよくね?
589:名無しさん@お腹いっぱい。
22/08/03 20:32:58.41 .net
>>576
何をベースにってBSDベースでしょ?
SolarisとかはSystemVベースだからtrコマンドの挙動が違う
互換性を重視してPOSIXを無視してる
590:名無しさん@お腹いっぱい。
22/08/03 20:34:34.24 .net
URLリンク(qiita.com)
> POSIXに準拠してないSystem V実装が悪いと言ってしまえばそれまでなのだが、
> 歴史の上ではPOSIXよりも早いのでそれをいうのもまた理不尽というもの。ではどうすればいいか。
591:名無しさん@お腹いっぱい。
22/08/04 09:47:52.75 .net
>>576
おら。ちゃんとPOSIXの経緯調べてきたか?
黙ってないでなんとかいえや
592:名無しさん@お腹いっぱい。
22/08/05 10:23:52.72 .net
>>577
sh ではできるだけパイプで処理することを考えるんだ
もちろん for, while などが必要な局面はあるが
パイプで済むなら速くて簡潔でフィルターとして組み合わせられる
593:名無しさん@お腹いっぱい。
22/08/05 10:46:42.12 .net
>>582
ファイル名に改行が入る場合はどうすればいいのでしょうか?
594:名無しさん@お腹いっぱい。
22/08/08 18:30:05.02 .net
自分ならまずそういうアホなファイル名を変更するが
権限がなければまあ
find -print0 | xargs -0
くらいだな
595:名無しさん@お腹いっぱい。
22/08/08 21:06:49.38 .net
>>584
POSIX準拠じゃないので
FreeBSDで動きませんw
596:名無しさん@お腹いっぱい。
22/08/14 20:39:40.32 .net
POSIX準拠じゃなくてもFreeBSDで動くけどな
POSIXにないのでも、ツール間で合わせ合う、どっちかがどっちかに似せるというのは普通にあるしな
597:名無しさん@お腹いっぱい。
22/08/14 21:19:42.49 .net
POSIXにないオプションは使用禁止だ
そんなものを使うと持続性がなくなる
なんらかの理由で別のOSに変更になった時
システムは動かなくなってデータはただのゴミになる
何度言えば理解できるのか
598:名無しさん@お腹いっぱい。
22/08/15 12:57:39.48 .net
はいはい、原理主義ごくろうさん
使ってる本人次第でしかないのに押し付けとかホント原理主義者は
599:名無しさん@お腹いっぱい。
22/08/15 13:03:07.61 .net
原理主義者は自惚れてるけど無知さがだだ漏れる
無知さを隠す誤魔化すためのマウント取りでしかない
600:名無しさん@お腹いっぱい。
22/08/15 13:26:13.07 .net
リッチー大佐はC言語も使える
ただし分割コンパイルやmakeといった高度な機能は使わない
そんなものはなくてもシェルスクリプトでmake.shを作れば良いからだ
601:名無しさん@お腹いっぱい。
22/08/15 13:28:32.48 .net
>>585
pkg install findutils
602:名無しさん@お腹いっぱい。
22/08/15 14:25:12.28 .net
それ入れなくてもFreeBSDのfindで可能だけどな
がっつりGNU依存のにしても、それ入れる+ちょっとパス修正だけだわな
603:名無しさん@お腹いっぱい。
22/08/15 16:04:55.82 .net
BSDのfindなら
find 場所 -print0 | xargs -0
604:名無しさん@お腹いっぱい。
22/08/15 20:36:03.11 .net
持続性なら、もはやPOSIXよりも、Linuxのほうがいいのでは。
605:名無しさん@お腹いっぱい。
22/08/16 12:18:54.66 .net
posixってソフトウェア規格でしょ?
606:名無しさん@お腹いっぱい。
22/08/16 12:28:09.90 .net
ソフトウェア規格って?
公式ページでも見れば?
607:名無しさん@お腹いっぱい。
22/09/19 12:12:56.52 .net
bashの関数で文字列を返したい場合、その関数名を文字列名称に使うことは仕様的に可能ですか?
function kotae () {
kotae=$1$2
}
kotae ab cd
echo $kotae
608:名無しさん@お腹いっぱい。
22/09/23 09:54:01.90 .net
>>597
関数と変数の名前空間は別なので別に構わない、そして宣言(declare)してなければ変数concはグローバル
ややこしいのでそういう使い方のおすすめはしない
609:名無しさん@お腹いっぱい。
22/09/23 09:55:09.11 .net
concはkotaeの間違い
頭の中で勝手に命名しちゃった
610:名無しさん@お腹いっぱい。
22/09/24 14:46:59.72 .net
>>597
そのようなことをしたい場合はこうする
function kotae () {
printf -v $1 "%s" $2$3
}
kotae ret ab cd
echo $ret
611:名無しさん@お腹いっぱい。
22/10/28 02:25:37.28 .net
bash 5.2.2(1)で最初の!だけ全角の
echo "abc!? xyz!"
は通るのに、半角にすると
echo "abcecho "abc!? xyz!"
>
になってしまいます。
一対の"で通すにはどうすればいいのでしょうか?
>>598-600
ありがとうございます。
printfのvオプションは初めて知りました。
612:名無しさん@お腹いっぱい。
22/10/28 13:13:38.41 .net
ヒストリ機能
知らない/活用してないならオフにしておくべき
対話モードでしか機能しないから切っても特に問題はない
613:名無しさん@お腹いっぱい。
22/10/29 10:43:22.22 .net
バックスラッシュをつけてエスケープ。
614:名無しさん@お腹いっぱい。
22/11/06 16:47:34.57 .net
恥を忍んで質問させて下さい:
Larry Wallせんせーが書いたmetaconfigが普及せずに、同じ機能を果たす、
Autoconf/Autotoolsが普及した理由って何でしょう?
1)Perlよりm4の方が普及してた(どっちも文法はアレだけど)
2)というかPerl嫌いな人が少なくなかった
3)そのほか(開発モデルとか)
...imakeって何だっけ?
615:名無しさん@お腹いっぱい。
22/11/06 18:24:19.31 .net
Autoconf/AutotoolsはGNUだからじゃね?しらんけど
616:名無しさん@お腹いっぱい。
22/11/07 01:26:02.31 .net
rsync -avR -e ssh ...
rsync -avR -e ssh ...
このように6行以上書くとエラーになるんですがどうしてでしょう?
ssh: connect to host xxxx: Connection refused
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code 255) at io.c(228) [sender=3.2.3]
617:名無しさん@お腹いっぱい。
22/11/07 06:20:59.25 .net
6行以上書いたからじゃね?
618:名無しさん@お腹いっぱい。
22/11/07 07:38:39.12 .net
>>606
クライアントからの接続要求の処理中に次の接続要求が来たら待たせるようになっててそのバッファが5個だからそれ以上に次々と接続要求きたらConnection refusedを返すようになってる
少し時間を空ければ大丈夫なはず
てか、サーバーは何?
619:602
22/11/07 11:40:12.51 .net
>>608
ありがとうございます。そうでしたか。
コマンドの内容と関係無さそうだったので迷いました。
接続先のサーバーは自宅のraspiです。
620:名無しさん@お腹いっぱい。
22/11/08 09:01:57.74 .net
もしかしてファイル転送を多重化しようとしてるのかな そういうオプションがあったような気がするけどね rsync
621:名無しさん@お腹いっぱい。
22/11/08 23:15:42.53 .net
はい、ぶたがみーるー
まあ、ここにも俺がいるわけですけどねw
622:名無しさん@お腹いっぱい。
23/03/27 06:41:34.11 .net
バックしまーす
623:名無しさん@お腹いっぱい。
23/06/18 23:35:36.05 .net
function YesNo {
local yn
while true; do
read -p " [Yes/No" "$1" "]: " yn
case $yn in
[Yy]*) return 0 ;;
[Nn]*) return 1 ;;
[Ee]*) if [ ! "$1" = "" ]; then return 2; fi ;;
esac
done
}
#main
YesNo ":いいえ /Else:その他"
echo $?
exit
実行すると、read: `:いいえ /Else:その他': 有効な識別子ではありません
とエラーになるのですが、どうすればいいでしょうか?
624:名無しさん@お腹いっぱい。
23/06/19 06:14:08.74 .net
-p に渡っているのは " [Yes/No" だけで、残りの "$1" と "]: " は yn と同じく変数名として解釈されている
read -p " [Yes/No $1 ]: " yn
625:名無しさん@お腹いっぱい。
23/06/23 17:18:03.40 .net
テスト
626:名無しさん@お腹いっぱい。
23/08/23 21:31:25.96 .net
これってどうしてそうなのだろう?
627:名無しさん@お腹いっぱい。
23/08/27 18:57:22.73 .net
readコマンドの引数にダブルクォートを使ってるからだぬ
だから>>614氏が指摘しているコトになってるぬ
628:名無しさん@お腹いっぱい。
24/02/20 08:47:58.81 .net
先にBを算出することもなく変数の追加もなしで処理2を1箇所にすることは可能でしょうか?
if [ A ]; then
Bを算出
if [ B ]; then
処理1
else
処理2
fi
処理2
fi
629:名無しさん@お腹いっぱい。
24/02/20 14:15:04.07 .net
2度目のエルスを書かなければいいだけじゃなくて?
630:名無しさん@お腹いっぱい。
24/02/20 17:32:39.42 .net
>>619
「処理2」は2度処理される必要があるのかもしれん。例えば、ステータスを1 upするような。
出題者はおそらくelse節を冗長処理として、1度きりの処理の意味で「1箇所にする」と要件を定義したのだろう。
が、現実にこんなアバウト野郎のかもす空気を読んでウカウカとelse節を削ると、分かりにくいバグになったりする。
なので、問題を正確に記述しろ糞ボケと回答すべきだと思う。
631:名無しさん@お腹いっぱい。
24/02/22 06:05:52.23 .net
>>618
else 足りなくね
処理2を1度または2度実行するのに、1箇所にしたいとかイミフ
!Aだったら処理2をする つもりなら、そのまま書けばいいだけだな。シェルスクリプトならw
Bを前もって算出できるなら、[ A -a B ] って本人も分かってるだろうが、Bを算出することもなくでも、そのまま書こうと思えばかけるわな、 [ A -a { Bを算出; B; } ] 風に
632:名無しさん@お腹いっぱい。
24/02/22 18:42:19.24 .net
{ ifを何重にもネストしたブロック } || 処理2
みたいなのでも
633:名無しさん@お腹いっぱい。
24/03/14 17:20:13.74 .net
while ...do
処理1
done <<=LIST=
リスト1
=LIST=
while ...do
処理2
done <<=LIST=
リスト1
=LIST=
てののリスト1を一つにできんべか。ただし、リスト1全てに対し処理1をし終えてから処理2を行なう必要があるので、
while ...do
処理1
処理2
done <<=LIST=
ではあかん。
634:名無しさん@お腹いっぱい。
24/03/14 18:05:33.59 .net
ヒアドキュメントの中で変数を展開できます。
LIST_CONTENT="リスト1
...
"
while read s; do
printf '%s\n' "${s}"
done <<LIST
${LIST_CONTENT}"
LIST
635:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています