タグ付けされた質問 「bash-expansion」

4
別のスクリプトのコンテンツとして使用するために変数をエスケープします
この質問は、適切にエスケープされた文字列リテラルの書き方に関するものではありません。スクリプト内または他のプログラムで直接使用するために変数をエスケープする方法に関するものではない関連する質問は見つかりませんでした。 私の目標は、スクリプトが他のスクリプトを生成できるようにすることです。これは、生成されたスクリプト内のタスクが別のマシン上で0 回からn回実行され、それらの生成元のデータが実行前に(再び)変更される可能性があるため、ネットワークを介して直接操作を行うためですうまくいかない。 単一引用符などの特殊文字を含む可能性がある既知の変数がある場合、完全にエスケープされた文字列リテラルとして書き出す必要があります。たとえば、生成されたスクリプトにfoo含まれる変数bar'bazは次のようになります。 qux='bar'\''baz' これは"qux=$foo_esc"、スクリプトの他の行に追加することによって書き込まれます。私はこのようにPerlを使用してそれをやった: foo_esc="'`perl -pe 's/('\'')/\\1\\\\\\1\\1/g' <<<"$foo"`'" しかし、これはやり過ぎのようです。 私はbashだけでそれを行うことに成功していません。私はこれらの多くのバリエーションを試しました: foo_esc="'${file//\'/\'\\\'\'}'" foo_esc="'${file//\'/'\\''}'" しかし、余分なスラッシュが出力に表示されるか(私が実行した場合echo "$foo")、構文エラーが発生します(シェルから実行された場合、さらに入力が必要になります)。

3
bashのファイル名展開メカニズムからいくつかのファイルを除外するにはどうすればよいですか?
ルートディレクトリにubuntuファイルシステムディレクトリがあり、誤って何百ものファイルをルートディレクトリにコピーしました。 私は直感的にファイルシステムを除外してコピーされたファイルを削除しようとしました rm -rf !{bin,sbin,usr,opt,lib,var,etc,srv,libx32,lib64,run,boot,proc,sys,dev} ./. 動作しません。全体を削除しながらいくつかのディレクトリを除外する適切な方法は何ですか? 編集:何をすべきかを知らずに、ここでコマンドを実行しないでください!

3
bash [[]]コマンド内の自動変数展開
の変数を間接参照する場合、符号bashを使用する必要があります$。それにもかかわらず、次のようにうまく機能しているようです: x=5 [[ x -gt 2 ]] 誰もこれを説明できますか? 編集:(詳細) 私が意味するのは、[[]]コマンドが$記号なしで変数xを逆参照する方法と理由です。はい、x = 1の場合、ステートメントはfalseと評価されます(ステータス1を返します)

1
bash拡張グロブ-プレフィックスなしのファイルに一致
fail2ban刑務所のファイル名を一致させようとしています-そのため、ファイル名のグロビングのみを使用する必要があります-正規表現やbashスクリプトは使用しません。 私の/var/log/apache2ディレクトリには、次のファイルが含まれます。 example.com.error.log db.example.com.error.log app1.example.com.error.log app2.example.com.error.log を.error.log 除く すべてのファイルに一致するグロブを作成しようとしていますdb.example.error.log-これは可能ですか? 試しました!(db)*.error.logが、これはまだ一致していdb.example.com.error.logます。私は推測している!()可能、何の文字に一致されていない*ファイル名の先頭から一致します。 注:新しいappXログファイルが追加されたときにグロブを拡張する必要はないため@()、現在知られている非dbファイル名のリストでは使用できません。 (背景:db.example.com を除くすべてのドメインでphpMyAdmin URLを要求する人を禁止するフィルターを作成したい)


2
bashファイル名の拡張(グロビング)の最大数はありますか?ある場合、それは何ですか?
bashファイル名の拡張(グロビング)の最大数はありますか?ある場合、それは何ですか?参照してくださいグロブ tldp.orgに。 ファイルのサブセットに対してコマンドを実行したいとしましょう: grep -e bar foo* rm -f bar* bashが展開するファイルの数に制限はありますか?ある場合、それは何ですか? これらの操作を実行する別の方法を探していません(たとえばを使用してfind)。

3
ファイル名のシェル展開(A | B)?
orたとえば、ファイルを読み取るときにシェルの選択肢を拡張することは可能ですか? つまり、たとえば、ファイル内のAまたはBに一致するgrepような構文をサポート(A|B)します。 同様に、これらのファイルがある場合: file1.txt file2.txt file3.txt file4.txt file5.txt 私は何ができるcat file{1..5}.txtでbash、それは範囲を拡大するよう、。いくつかのファイルに対してこれを行う同等の方法はありますか? たとえばcat file(1|5).txt、これら2つだけを印刷しますか?

6
毎月の名前のディレクトリを作成するにはどうすればよいですか?
毎月ディレクトリ名を作成したいと思います。シェルで遊んだ後、次のことがわかります。 date -d 1/01 +%b # Gives Jan date -d 2/01 +%b # Gives Feb . date -d 12/01 +%b # Gives Dec だから私はブレース展開を使用して、echo {1..12}/01それを試してみましxargsた: echo {1..12}/01 | xargs -n 1 -I {} date -d {} +%b しかし、それは惨めに失敗します:/(後で適用したいと思いますmkdir)。これどうやってするの?

5
$()のコマンドによって出力された{1,2}が補間されないのはなぜですか?
2つのテキストファイルがあるディレクトリにいます。 $ touch test1.txt $ touch test2.txt いくつかのパターンを使用して(Bashで)ファイルを一覧表示しようとすると、機能します。 $ ls test?.txt test1.txt test2.txt $ ls test{1,2}.txt test1.txt test2.txt ただし、パターンがで囲まれたコマンドによって生成される場合、パターンの$()1つだけが機能します。 $ ls $(echo 'test?.txt') test1.txt test2.txt $ ls $(echo 'test{1,2}.txt') ls: cannot access test{1,2}.txt: No such file or directory 何が起きてる?なぜパターン{1,2}が機能しないのですか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.