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

レス数が950を超えています。1000を超えると書き込みができなくなります。
1デフォルトの名無しさん
垢版 |
2018/07/24(火) 11:01:16.36ID:r0TJj2hB
シェルスクリプトに関する総合スレッドです。

全般
・荒しは無視しましょう。
・丁寧な姿勢を心掛けましょう。
・ネチケット(死語)を意識しましょう。

前スレ: シェルスクリプト総合 その27(https://mevius.5ch.net/test/read.cgi/unix/1525337663/
2018/09/15(土) 20:13:17.74ID:8KftQgLD
>>890
でもなんかその操作をawk一つにまとめるって
emacsのorgモードに近い印象を受けるというか
ちょっとUnix哲学っぽくねえなと思う。

もちろんUnix哲学に従う必要性は皆無なんだけど,あくまで個人的な意見として。
2018/09/15(土) 20:16:21.20ID:pm09nqHo
>>891
それ言ったらsedは今回、範囲選択+行選択+置換 の3つを同時にやってるんやで?w
2018/09/15(土) 20:20:10.43ID:8KftQgLD
>>892
俺の >>883 ←これはそんなことやってねえぞ(謎の自信)
検索→表示オンリー

スレチにもほどがあるのでそろそろやめるわ
2018/09/15(土) 20:41:53.02ID:pm09nqHo
sedもawkも複数行のスクリプトを実行できるわけで
一つのコマンドで複雑な異なる機能を提供してるから
Unix哲学から反してるのかもね

だから例のアレはUnix哲学がどうとか言ってる割に
結局awkでプログラム書くんかいって突っ込みたくなるんだな
895デフォルトの名無しさん
垢版 |
2018/09/15(土) 20:45:00.31ID:8rxpHkWL
まだとどまる事のない誤解を披瀝し続けとってわろたw
2018/09/15(土) 21:28:41.91ID:imSsWev+
みなさんどうもありがとうございます!

>>881
おお!こんなオプションがあったんですか!って思って試してみたんですが、
上のスクショのLC-AAC-Sample.aac、HE-AAC-Sample.aacで試すと、どちらもAACと表示され、
このファイルはLC-AACかHE-AACなのか判別して次の処理に進む事が出来なかったので、このオプションではダメでした。

INFO=$(mediainfo "$FILE" | sedほげほげ"
case "$INFO" in
"AAC LC" )
ほげほげ1

"AAC LC SBR")
ほげほげ2

*)
ほげほげ3

って感じで次の処理に進むんですが、
>>879、880、888だとほげほげ1か2に進めて、>>883だとほげほげ3になってしまいました。
2018/09/15(土) 21:30:45.05ID:imSsWev+
>>883
端末はMacのiTerm、シェルはfish、プロンプトは適当にいじったやつです。
2018/09/15(土) 21:43:49.56ID:pm09nqHo
>>896
> このファイルはLC-AACかHE-AACなのか判別して次の処理に進む事が出来なかったので、このオプションではダメでした。

ちゃんと調べた? %Format%以外で出るのあるんじゃないの?
2018/09/15(土) 21:59:26.07ID:imSsWev+
>>898
Audio;%Format/Info%
だと上のスクショの
Advanced Audio Codec Low Complexityなになに
が取り出せるようでした。
これだとLC AACならAdvanced Audio Codec Low Complexity
HE-AACならAdvanced Audio Codec Low Complexity with Spectral Band Replication
が取り出せるので判別出来そうです。
2018/09/15(土) 22:08:36.45ID:8KftQgLD
>>896
>>883のコマンドラインを提案した者だが
mediainfo "$FILE" | sed -n -e '/^Audio/,$p' | grep '^Format' | cut -f '2-' -d ':' -s | sed -e 's/^[[:blank:]]//1'
↑これでいけるかな。
ただ長いので他の人のを使ったほうがいいかも
2018/09/15(土) 22:18:17.17ID:8KftQgLD
>>899
ところで
http://www.mpeg-audio.org/members/files/DASH_Files/Audio_Only_Stereo_Dash.zip
↑こっからDLできるサンプルファイルで試したところ

AAC-LC/Technology-en-69s-2-lc-64000bps_seg.mp4

HE-AAC/Technology-en-69s-2-heaac-64000bps_seg.mp4

mediainfoの出力結果で
Audio;FormatではどちらもAAC表示で区別できず
Audio;Format profileでやっと区別できるんだけど,俺の勘違いかな。
2018/09/15(土) 22:25:58.84ID:8KftQgLD
何度も投稿してすまん。
これでいいんじゃないかな。
確かめた環境はMediaInfo 0.7.91 on Debian 9.5。
case "$(mediainfo --Inform='Audio;%Format_Profile%' "$FILE")" in
HE*) echo 'HE';;
LC*) echo 'LC';;
esac
2018/09/15(土) 22:45:32.78ID:pm09nqHo
>>896のコード見て思うのは

Unix哲学(を完全に受け入れたわけじゃないが)
9. 全てのプログラムはフィルタとして振る舞うようにせよ。

すべてのプログラムはフィルタとして振る舞うようにしたとして
そのプログラムを使う側もフィルタとして利用するようにすべきだと思うわけよ

つまりね、こういうふうに書くべきじゃないのか?ってこと

mediainfo --Inform='Audio;%Format_Profile%\n' "$FILE" | while IFS= read -r line; do
 case $line in
  HE*) echo 'HE';;
  LC*) echo 'LC';;
 esac
done

本当は$FILEの所も"$@"にして複数ファイル対応できるようにしたい。
だけどメディアファイルっていうのはオーディオを複数入れることができるはずだから、
この場合どうなるのか?という疑問がある。その場合はうまくいかないかもしれない。
まあ適切なサンプルファイルを思いつかんし面倒だから試しては見てないが
2018/09/15(土) 23:39:36.74ID:imSsWev+
みなさんどうもありがとうございます
>>896の時点のコードは以下です
https://pastebin.com/qdNT6iBm
拡張子がaacのファイルがあるディレクトリでこのスクリプトを動かしたらaacファイル全て(ひとつづつ)処理させてます。

>>900-903
明日確認してみます

$ mediainfo --version
MediaInfo Command line,
MediaInfoLib - v18.08.1

以前のバージョンではFormat profile欄があったのでそこで判別してたんですが、いつのまにか(昨日気がつきました)最近のバージョンではFormat profile欄がなくなっているんです。>>878のスクショです
2018/09/15(土) 23:59:46.80ID:8KftQgLD
>>904
なるほどね。Debainのaptで入れたやつは古いのか。

$ mediainfo --version
MediaInfo Command line,
MediaInfoLib - v18.08.1
$ mediainfo --Output='Audio;%Format_AdditionalFeatures%' ./Audio_Only_Stereo_Dash/HE-AAC/Technology-en-69s-2-heaac-32000bps_seg.mp4
LC SBR
$ mediainfo --Output='Audio;%Format_AdditionalFeatures%' ./Audio_Only_Stereo_Dash/AAC-LC/Technology-en-69s-2-lc-64000bps_seg.mp4
LC
これは結構見分けやすいんじゃないか?
2018/09/16(日) 00:12:32.41ID:ynEgKPZ+
>>904
ちょっと訊きたいんだけど,MPEG4のLCとHEの違いってSBRが適用されてるかいなかの差?
もしそうならまさにそのオプションがあって
mediainfo --Output='Audio;%Format_Settings_SBR%'
↑これは,SBRが含まれていれば“Yes (Explicit)”,含まれていなけば空文字を返す。
2018/09/16(日) 00:17:30.07ID:6L484PJq
>>904
> >>896の時点のコードは以下です
> https://pastebin.com/qdNT6iBm

つまらん。特に指摘する点はない。
細かい趣味程度のことぐらいだな。

ファイルは引数で渡したほうがいいんじゃね?とか
俺ならset -eu -o pipefailをつけるとか
(一行で書く場合を除いて)コマンドの後ろの ;; は嫌いだとか
2018/09/16(日) 01:08:58.79ID:dyBKzwHe
大先生かよw
2018/09/16(日) 01:22:39.05ID:6L484PJq
ちーす
2018/09/16(日) 13:43:22.79ID:dTju3huw
ネタフリ、これ前に紹介したことあったっけ?

modernish: a shell moderniser library
https://github.com/modernish/modernishhttps://github.com/modernish/modernish#modernish-a-shell-moderniser-library

良さそうなことを書いてあるが、大きすぎて、それでいて何ができるのかよくわからない
ようするに誰か日本語で簡潔に解説してくれとw
2018/09/16(日) 21:03:29.36ID:ynEgKPZ+
変な人が二人いるせいで質問者が帰っちゃったじゃん。せっかく良い案を思いついたのに。
2018/09/16(日) 23:14:50.58ID:dTju3huw
いや、気にせず書けよw
また見るかもしれないじゃん
2018/09/16(日) 23:27:44.88ID:ynEgKPZ+
もう書いてるよw
2018/09/17(月) 09:30:58.79ID:yJ/mJYoq
二人いるんじゃなくて、同一人物なんじゃ?
例の人、プロバイダー2つ契約してて自演に使ってるんだし。
2018/09/19(水) 03:32:21.41ID:6Ke1Nn09
引用符を除去するいい方法ってないかな。
個人的には変数の仕様("abc"はabcとみなされる)とかを利用してエレガントに解決できるんじゃないかと思ってるんだけど うまくいかん。
いまのところsed -e 's/"\([^"]+\)"/\1'で問題はないけれど「\"」の形のエスケープに対応したりするのが面倒になってくるんだよね この形だと。
2018/09/19(水) 04:43:37.82ID:ScWhkKn/
a='"aa\"a"'
eval echo "$a" とか eval "b=$a"
じゃだめ?


おまけ、最近のbashには以下のような変数展開が
増えているけど今回は関係なさそう
${parameter@A}
${parameter@E}
${parameter@P}
${parameter@Q}
2018/09/19(水) 07:25:21.58ID:6Ke1Nn09
>>916
なるほどevalは思いつかんかったわ。
ただそれだと "aa\""→aa" になってしまうんだが これは正常な動作なんだろうか。
2018/09/19(水) 07:59:33.05ID:ScWhkKn/
>>917
さあね。「引用符を除去するいい方法」の正確な意味がよくわからないので
もしかして単に前後の引用符を除去するだけだった?
ならこれだけで行けるけど

a='"aa\"a"'
a=${a#\"}
a=${a%\"}

エレガントに解決っていうから、なんかもっと複雑な話かと思った
2018/09/19(水) 08:36:50.27ID:6Ke1Nn09
>>918
いや 別に文句を言ったつもりはない
先に挙げてもらった方法で解決してるし あれはすごくエレガントだと思う。


エレガントっていうのは数学畑の言葉のつもりで使った。
つまりまわりくどいやりかたではなく本質をつらぬいた方法。
今回は,
「シェルに対してトークンの区切りを示すための引用符をシェルに読み込ませることによって除去する」
という非常に直感的で素晴しい方法を学べた。
俺のやりかたはわざわざsedを使ってる点で,シェルが解釈するという本質から外れてしまっている。
2018/09/19(水) 08:38:35.76ID:6Ke1Nn09
ちなみにやりたかったことは単純に
VAR="value with space"
↑こういうことが書かれたファイルから
value with space
という語句を取り出すというもの。

$ cat /etc/os-release | grep '^PRETTY_NAME' | cut -f 2 -d '=' | eval echo "$(cat)"
↑こういう感じ。
2018/09/19(水) 09:31:58.31ID:qXmDWFW/
$ cat /etc/os-release | grep '^PRETTY_NAME' | cut -d'"' -f2

というのはどうだろう
2018/09/19(水) 09:41:44.85ID:ScWhkKn/
>>919
単に文字列の途中にどういう意味かわからなかっただけだよ。
>「\"」の形のエスケープに対応したりするのが面倒
とか書いてあったから、何がしたいんだろうと

前後の""を取るだけなら>>918のやり方が最短で最速

>>920
> VAR="value with space"
> ↑こういうことが書かれたファイルから
> value with space
> という語句を取り出すというもの。

それだとまた話が変わってくるな
(. /etc/os-release; echo $PRETTY_NAME)

()でくくってるのは、単に変数のスコープをサブシェルに閉じ込めてるだけ
カレントシェルにばらまいていいなら()はいらない

シェル互換の文法としてみなせるファイルならこれでいけるよ
コードが入っていたら実行されるから、安全なファイルと断定できるものにしか使えないけど
923デフォルトの名無しさん
垢版 |
2018/09/19(水) 22:30:20.23ID:/Yn8C735
"a" → a

こういう変換は、CSV でも苦労してる。
" が偶数個なら良いけど、奇数個なら形式エラーにするとか

CSV は、様々なバグが考えられるから、TSV が良い

"a""b" → a""b

ただし、" " 内で、" を使う場合、"" と連続させる。
この場合も、奇数個なら形式エラーにするとか、ややこしい
2018/09/19(水) 22:42:07.01ID:ScWhkKn/
>>923
別々の言語で3回ぐらいCSVのパーサーを書いたことありますよ
ダブルクォートがない場合、あって改行が入ってる場合など
Excelの仕様に完全対応したCSVライブラリがその言語になかったので

Perlの変態正規表現レベルにまでなれば可能かもしれないですが、
そういうネスト構造のあるものは単純な正規表現では解決不可能な問題です。
925デフォルトの名無しさん
垢版 |
2018/09/19(水) 22:46:07.55ID:xLP4ypV2
タブ区切りでも
当然ダブルクォートがいる

頭悪いこといってるわ。。。
926デフォルトの名無しさん
垢版 |
2018/09/20(木) 09:41:46.66ID:cMPVhU9i
ダブルクォートを特別扱いするかどうは仕様によるのでは?
2018/09/20(木) 10:46:25.87ID:jnBpqPJK
CSVの仕様といったらRFC4180やろ
928デフォルトの名無しさん
垢版 |
2018/09/20(木) 12:24:25.01ID:rEtRtbV+
>>927
それって区切り文字がタブの場合も書かれてるの?
2018/09/20(木) 12:57:43.85ID:ILleL3Gt
それくらい読めよw

RFCにはないけど、MIMEタイプ定義してる
https://www.iana.org/assignments/media-types/text/tab-separated-values
によると、
Note that fields that contain tabs are not allowable in this encoding.
となっているし、たぶんEOLも含んじゃだめそうなので、ダブルクオートいらねえよ。
2018/09/20(木) 20:07:29.45ID:v1EqyHAs
まあいくらRFCで規定してもディファクトスタンダードのExcel読めるフォーマットでないと意味ないしな w
2018/09/20(木) 20:41:14.92ID:jnBpqPJK
>>930
RFC4180とExcelのCSVはほとんど同じ

違いはデータの中に改行が含まれてる場合
Excelデータの中の改行はLF。(一行の最後はCRLF)
RFC4180はデータの中の改行はCRLF(一行の最後は同じくCRLF)

これだけしか違いはないよ
2018/09/20(木) 20:45:03.75ID:jnBpqPJK
CSVもTSVデータとしてキーボードから入力可能な文字を
区切り記号としているわけで、なんで
RS (0x1e Record Separator) とか
US (0x1f Unit Separator) とかいう
便利な文字を使わなかったのか?って思うな
933デフォルトの名無しさん
垢版 |
2018/09/20(木) 21:32:37.16ID:zLqp8E23
頭悪いこといってるわ
そんなコードなキーボードからどうやって入力すんの

viならできるが
こんなアホが、vi使えるとは考えらればいしな
934デフォルトの名無しさん
垢版 |
2018/09/20(木) 21:37:28.28ID:IHzBiPD0
いつまでトリップはずしてんねんお前
2018/09/20(木) 21:38:06.55ID:MjJalB6Y
>>931
ほとんど同じとか言うプログラマーは信用できない
2018/09/20(木) 21:38:41.53ID:t6JihYkI
そもそもCSVは数値の表のためのデータ形式だからね
937デフォルトの名無しさん
垢版 |
2018/09/20(木) 21:39:06.57ID:Rg0LfXUv
ほとんど病気
938デフォルトの名無しさん
垢版 |
2018/09/20(木) 21:42:44.26ID:zLqp8E23
カンマのキーとタブのキーと改行のキーは
どのキーボードについてる

低学歴知恵遅れにはコレが分からない
2018/09/20(木) 21:51:32.09ID:jnBpqPJK
>>933
CSVエディタを使えばいいだけでは?
2018/09/20(木) 21:51:35.97ID:5pjY9bpj
CSVネタで久しぶりにアノヒトが嬉々として現れたなってことかな?w
2018/09/20(木) 21:53:59.48ID:jnBpqPJK
つーかCSVファイルをテキストエディタなんかで閲覧、編集する人なんていないでしょう?
可能か不可能かで言えば、可能だけどバイナリエディタでテキスト編集するような感じで
効率が悪いから、みんなエクセルつかってCSVファイルの読み書きするんだけど
942デフォルトの名無しさん
垢版 |
2018/09/20(木) 22:13:21.07ID:8Bepevhe
国によっては、カンマとピリオドの意味が逆転してるのあるけど
そんな国でも割り切って、セパレータはカンマにしてるんだろか

小数点がカンマ、どーしてそうなったか興味あるが
943デフォルトの名無しさん
垢版 |
2018/09/20(木) 22:16:57.13ID:zLqp8E23
引用符でくくられてたらどんな記号でも問題起きないからな
textを普通のエディタで開いてなんのコードが混入してるか分からないほうが
普通の感覚でイヤだから

低学歴知恵遅れなら細かいことは気にしないかもしれない
2018/09/20(木) 22:18:05.52ID:MjJalB6Y
>>941
編集はExcelだけど差分が容易に取れるからバージョン管理の為にcsvしてる
945デフォルトの名無しさん
垢版 |
2018/09/20(木) 22:24:15.47ID:zLqp8E23
たとえばhttpもsmtpもコンテンツ以外は
crlfを除いて普通にぜんぶ0x20以上0x7e以下のテキストでやりとりしてるからな
低学歴知恵遅れなら、自分はそんなの意識しないUA使ってるからなんでもいいというワケ
946デフォルトの名無しさん
垢版 |
2018/09/20(木) 22:28:11.99ID:zLqp8E23
低学歴知恵遅れは
まずcsvがデータ交換用のフォーマットであることが分かってない
2018/09/20(木) 22:33:55.28ID:8pZm26YJ
>>925
半角また間違えたんか。何度目だよ
948デフォルトの名無しさん
垢版 |
2018/09/20(木) 22:39:27.57ID:zLqp8E23
デファクトスタンダードのエクセルで
タブ区切りで保存すると
ふつうにこうやって保存されるからな

aho<HT>"boo""foo"<HT>baka
aho<HT>"boo""foo"<HT>baka
2018/09/20(木) 23:21:58.71ID:fVTsYrUH
>>948
そうだね そうだね
2018/09/21(金) 00:46:25.95ID:m8DL5ZJ4
>>931
TSV にして、データ中に、タブ・改行を使わないのが良さそう

>Excelデータの中の改行はLF。(一行の最後はCRLF)
Linux・Windows 間で、テキスト転送しても、改行コードが変わるから、ヤバイ
2018/09/21(金) 01:24:23.69ID:i9i22CNp
Excelで直接開くと勝手にフォーマット変換されるのが気に入らないからテキストエディタで開いてからExcelにコピーとかやってるわ
2018/09/21(金) 02:43:02.52ID:v8LFlyn0
>>950
タブはともかく改行は無理
Excel使ってると改行は絶対入れる
2018/09/21(金) 02:43:36.28ID:v8LFlyn0
>>950
> Linux・Windows 間で、テキスト転送しても、改行コードが変わるから、ヤバイ
バイナリ扱いすればいいだけ
954デフォルトの名無しさん
垢版 |
2018/09/21(金) 04:04:34.44ID:m7KC0L1Z
>>951
拡張子を txt にしてから開いてウィザード動かすか、または 0 で始まる数字だけの文字列は ="0123" のようにして最初から作っておくとうまく行く。
2018/09/21(金) 04:48:00.63ID:dtC8HZuo
ちょっと荒れたのであまり話題にはしたくないものの
Unicodeの区切り文字を使うのはいい手段だと思う。
ただし思い切り独自規格なので既存の製品には対応できないけどね。もちろん
2018/09/21(金) 05:30:02.46ID:v8LFlyn0
RS、USってのはUnicodeじゃなくてASCIIの制御文字だよ
2018/09/21(金) 05:37:53.78ID:v8LFlyn0
もちろんUnicodeでも使えるけどね
2018/09/21(金) 06:06:23.57ID:v8LFlyn0
一般人はCSVファイルをExcelで編集する
となると別にテキスト形式ベースじゃなくても良いわけだ
だとすると誰がCSVファイルを望んでいるのだろうか?
おそらくプログラマなんだろうね。

考えてみればテーブル型データに限っていれば
CSVはJSONよりも効率よくデータを記述できる
JSONだったらこんな感じだしね

[
{"field1": 1, "field2": 2, "field3": 3},
{"field1": 1, "field2": 2, "field3": 3},
]

これがCSVだとここまでコンパクトに纏められる

field1,field2,field3
1,2,3
1,2,3

一般人のことを考えないくていいという前提のものと、もっと良い形式が考えてみよう
それもシェルスクリプトで扱うのが容易な形式

一行ずつ読み取るのだから、一データの終わりはLFであるべきだろう
そしてデータの中には改行は含まず、カンマや制御コードはprintfコマンドで
簡単に解釈ができるよう8進数にエスケープを行う。どうかね?
エスケープの処理を除けば既存のツールでも扱えるだろう

ただ問題があるとすれば、printfで変数に代入する時forkを行う必要があるということだな
これだと時間がかかってしまう。かといって1文字ずつパースするのも時間がかかる

一行ずつ処理するのが可能で、1カラムずつ処理するのも可能で処理に時間がかからない方法はないだろうか
959950
垢版 |
2018/09/21(金) 07:09:48.97ID:m8DL5ZJ4
>>931
>Excelデータの中の改行はLF。(一行の最後はCRLF)

もし、このCSV を、Linux で扱う場合には、やばくない?
行区切りをCRLF に設定すれば、データ中に、LF があっても問題ないのかな?
2018/09/21(金) 08:12:42.97ID:LR4lwFnG
>>959
別にLinuxでも行区切りがCRLFで行内の改行がLFのアプリは作れるでしょ
標準のアプリと動作が違うけどそういう特殊フォーマットだと思えばいいだけ
961デフォルトの名無しさん
垢版 |
2018/09/21(金) 09:34:09.19ID:7bTZc31z
>>958
fork?どういう処理を想定してるのか?
2018/09/21(金) 09:47:27.07ID:NXw3/PDJ
みんなで輪になって踊る処理やろ
963デフォルトの名無しさん
垢版 |
2018/09/21(金) 09:56:30.62ID:7bTZc31z
【審議中】
    ∧,,∧  ∧,,∧
 ∧ (´・ω・) (・ω・`) ∧∧
( ´・ω) U) ( つと ノ(ω・` )
| U (  ´・) (・`  ) と ノ
 u-u (l    ) (   ノu-u
     `u-u'. `u-u'
2018/09/21(金) 10:10:07.17ID:v8LFlyn0
>>961
a=$(printf 'test')

ビルトインコマンドであってもforkが行われる
2018/09/21(金) 10:49:46.73ID:v8LFlyn0
なんか次から次へと変なテクニックが編み出されていくw
2018/09/21(金) 12:41:08.14ID:FeY49FdE
構内放送「直ちに中庭に集合してください」
従業員 (また誰かforkコマンド実行したな…)
2018/09/21(金) 12:48:09.10ID:v8LFlyn0
>>960
> 別にLinuxでも行区切りがCRLFで行内の改行がLFのアプリは作れるでしょ

よく考えたら、シェルスクリプトでもそれなりに使いやすいかもしれない。
readで1行(LFがくるまで)読んで、読み込んだ最後がCRだったら行区切りあつかい
そうでなければ同一行としてあつかえば良いわけだし
968デフォルトの名無しさん
垢版 |
2018/09/21(金) 12:50:18.79ID:isbUNhMl
8進数エスケープってbashの機能で文字に直せなかったっけ?
2018/09/21(金) 12:53:33.36ID:v8LFlyn0
printf以外でってこと?
2018/09/21(金) 12:56:03.96ID:dtC8HZuo
たとえばエスケープをするのは
US,RS,エスケープ文字自体
↑これでどうだろうか各種エスケープは
\#,\%,\\
これ。

ちなみにあたり前だが 端末の画面に「分かりやすく」表示するときは
\#→水平タブ,\%→改行(LF)
に置換するのがいいだろう。
2018/09/21(金) 12:57:07.23ID:dtC8HZuo
>>968
echo $'\030'
↑こういう感じやね。
2018/09/21(金) 13:28:31.46ID:v8LFlyn0
>>971
あー、dashで使えないから頭から抜け落ちてたわw
2018/09/21(金) 18:20:35.40ID:dtC8HZuo
>>970
これはだめだ。
\<US> \<RS> \\
↑これで十分だった。
2018/09/21(金) 20:25:16.42ID:FeY49FdE
思いつきだけど、エスケープ文字自体を表すときは別の文字をエスケープして表現するほうが何かと都合がよくないか?
2018/09/21(金) 21:30:40.16ID:dtC8HZuo
>>974
くわしく。
具体例でたのむわ(アホで申し訳ない)
2018/09/21(金) 23:27:59.03ID:/eJt2TVD
例えば\rsを検索したいときに、\が\\でなければ\rsを検索するだけでよいけど、\が\\のときは見つけたあとに\の数をたどってそれが本当に\rsなのか調べないといけない、とか、
とある場所までシークしたときに、その場所の文字が何なのか、\を繰り返し数えないといけない、とか、
\?はすぐエラーとわかるとか。
977デフォルトの名無しさん
垢版 |
2018/09/22(土) 00:50:25.74ID:9bcvhAfJ
>>974
その別のエスケープ文字をエスケープするには
どうすればいいの?
2018/09/22(土) 01:10:24.01ID:Whfp6XnZ
>>977
エスケープ文字はあくまで\だけ。
例えば%を使うとして、
rsを表すなら\rs、
usを表すなら\us、
\を表すなら\%、
%を表すなら%、
と記す。とかね
2018/09/22(土) 03:37:20.07ID:LHC7cNdc
>>978
よくわからん。そのルールだと

\rsを表すときは、\%rs
\usを表す時は、\%us
\%を表す時は、\%%
%を表す時は、%
ってことか?

%を検索した時、それが本当の%であるかは
一文字前が\であるかどうかを調べないといけなくて、
\rsを検索したい時は、\%rsで検索しないといけないってことか?
2018/09/22(土) 04:10:01.34ID:wyOkhzEz
>>979
あってるよ。

\が\\の場合は、
\を検索するときは\\を見つけるだけじゃ不十分だけど、
\が\%の場合は、
%を検索するときは一文字前が\でない%を見つけるだけで十分だし、
\を検索するときも\%を見つけるだけで十分なんだ。

同様に、
\が\\の場合は、
\rsを検索するときは\\rsを見つけるだけじゃ不十分だけど、
\が\%の場合は、
\rsを検索するときは\%rsを見つけるだけで十分になる。
2018/09/22(土) 06:13:58.91ID:dKJ+Zat7
どうせRS,USとかの非文字を使うんなら
エスケープ文字もESCでいいんじゃないだろうか。
2018/09/22(土) 06:46:52.90ID:LHC7cNdc
bashでさ、typesetで関数の中身を出力できるじゃん?
それをevalで評価したら同じ関数が出来上がるじゃん?
これってどれくらい信用できるんだろう?

作成した関数のコードそのままの形で出力されるなら
evalで評価して同じものができるだろうけど、
ぱっとみtypesetで出力するされたものをみると、
改行の位置とか変わって整形された状態になって
関数にはfunctionが頭に追加されてる。

元のコードをどれくらい書き換えるんだろうか?
これ以外になにか変わる事知ってたりする人いない?
2018/09/22(土) 11:47:57.86ID:rfhCLeCr
次スレたてるわ
2018/09/22(土) 11:56:38.68ID:rfhCLeCr
次スレ
ワッチョイつけたぞ

シェルスクリプト総合 その29
http://mevius.5ch.net/test/read.cgi/tech/1537584801/
2018/09/22(土) 12:03:50.02ID:rfhCLeCr
今まで人気ないスレだったから全く不要だったわけだが、今後は次スレ立てる安価指定しといたほうがいいか
次回の勢い次第でテンプレ編集で
2018/09/22(土) 21:25:51.74ID:SEEeyc/q
埋めろって言っても反発されて埋まらん気もするし自分でやるわ
2018/09/22(土) 21:26:12.71ID:SEEeyc/q
埋め
2018/09/22(土) 21:26:36.85ID:SEEeyc/q
埋め
2018/09/22(土) 21:26:59.15ID:SEEeyc/q
埋め
2018/09/22(土) 21:27:22.40ID:SEEeyc/q
埋め
レス数が950を超えています。1000を超えると書き込みができなくなります。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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