問題タブ [dash-shell]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1619 参照

bash - Bourne シェル「printf %s」の使用法

大きなシェル スクリプトを作成するために使用する簡単な debug_print シェル関数があります。一般的に、私は Bourne 互換のスクリプトのみを作成し、Bash 主義を避けるようにしています。この場合、私の debug_print 関数の Bash バージョンは正常に動作しますが、私の Bourne 互換バージョンが失敗する理由を一生理解できません。具体的には、printf で %s フォーマット修飾子を使用する際に問題が発生します。

以下にテストスクリプトを含めました。debug_print 関数は、ラベル付きのヘッダー バー、その文字列またはファイル引数の内容、最後にヘッダーと同じ幅のフッター バーを表示します。問題はフッター バーの表示にあり、「フッター行を表示する...」というコメントで始まります。それに続くコメントされていない2行は、うまくいくと私が信じているものですが、うまくいきません。

それに続いて、「None of these work」コメントの下にいくつかのコメント行があり、問題を解明しようとしているときに使用したさまざまなテスト/分散の一部を確認できます。これらの行の後に、動作する Bourne バージョンがあり、最後に動作する Bash バージョンがあります。

私はマンページを詳細に読み、思いつく限りのさまざまなフォーマット文字列、引用、および変数の使用を試しました。これまでのところ、これらの試みはどれも正しく機能していません。「これらの機能はありません」というコメントの下で、機能しないコマンドはすべて、フィールド幅修飾子で指定された文字数だけではなく、文字列全体を出力します。

「Bourne 互換性」を判断するために、私のシステムではダッシュを /bin/sh として使用します。これは Debian システムの典型です。Dash は効率的なスクリプトの実行を目的としており、インタラクティブな使用を目的としていません。マンページによると、Bourne との厳密な互換性を目指して努力しているため、私のスクリプトがダッシュで動作する場合は、Bourne との互換性が十分にあり、bash-ism がないはずであると判断しました。また、この機能はデバッグ印刷のすべて/最終的なものではなく、多くのコーナーケースと改善できる領域がある可能性が高いことを認識しています. 私はすべての提案を歓迎しますが、特にこの printf の問題に関心があります。これがいかに単純であるべきかを考えると、何かばかげた間違いを犯しているに違いないように思えますが、それを見つけることはできません。

これが私の debug_print テスト スクリプトです。

助けてくれてありがとう。

0 投票する
3 に答える
5882 参照

bash - シェル/bashスクリプトでargv [0]値を変更するには?

このsetコマンドを使用して、位置引数 $1 $2 ... の値を変更できます。

しかし、 $0 を変更する方法はありますか?

0 投票する
2 に答える
470 参照

regex - Bashism のないシェルで部分文字列をチェックする

シェル スクリプトを作成しようとしていますが、その中で文字列内の-32の存在を探す必要があります。残念ながら、ダッシュを実行しているコンピューターで実行する必要があるため、バシズムを使用せずに実行する必要があります。

私は試しましたが、それは-321case ${1+"$@"} in *-32*);;のようなものを拾います。そのフラグだけを探すために正規表現などを使用する方法はありますか? 文字列内のスペースで区切られた他のフラグを持つことができます。

私が必要とする正規表現は、スペースまたは行末の後に -32 を探すと思います。-32(\s|$)

私は正規表現にかなり慣れていないので、それが最善の方法であるかどうかはわかりません。どんな助けでも大歓迎です!

ありがとう!

0 投票する
1 に答える
206 参照

shell - 現在定義されている関数をダッシュ​​に一覧表示しますか?

で現在定義されている関数をリストしたいと思いdashます。それを行う方法はありますか?

私が思いついた最も近いものはtype、関数が存在するかどうかをテストするために使用できるものですが、それ以外は困惑しています。

PS私はdashここで話しています(bashまたはではありませんzsh)。

0 投票する
3 に答える
992 参照

linux - ルートのダッシュをチェックインする方法

bash の標準ソリューションについては、次を参照してください。

https://askubuntu.com/questions/15853/how-can-a-script-check-if-its-being-run-as-root

つまり:

は、Linux の標準シェルになりつつあるダッシュでは機能しません。上記をダッシュ​​に移植するにはどうすればよいですか?