私はチルダ展開には、次のような状況のために働くいないことが判明動作しません。 Shellは "ティルド展開"の前に単語を分割します。そして、私は単語分割が実際に異なっていることに気づいた。異なる結果の理由は何ですか?シェルチルダ展開はオプションとして渡されたとき
5
A
答えて
4
ティルド展開は、シェル変数の割り当てでも発生します。destdir=~/test
は類似しています。 は変数名では有効な文字ではないため、dest-dir=~/test
と-destdir=~/test
はありません。シェルは変数割り当て(set -k
が使用される場合)としてdestdir=~/test
を評価していませんが、パーサーはそれをそのまま扱い、RHSでチルダ拡張を実行しているようです。
http://www.gnu.org/software/bash/manual/html_node/Tilde-Expansion.html#Tilde-Expansionから:「:」または第一「=」
各変数割り当ては、直ちに次の引用符で囲まれていないチルダプレフィックスのためにチェックされます。これらの場合、チルダ展開も実行されます。その結果、PATH、MAILPATH、およびCDPATHへの割り当てにチルダ付きのファイル名を使用することができ、シェルは展開された値を割り当てます。
注-k
オプションが設定され、適切な変数の割り当ては、このようなとprint_arg.pl
に渡される引数リストから削除として処理されていること:
~ $ set -kx
~ $ ./print_arg.pl destdir=~/bin foo
+ destdir=/Users/clint/bin
+ ./print_arg.pl foo
foo
~ $ ./print_arg.pl dest-dir=~/bin foo
+ ./print_arg.pl 'dest-dir=~/bin' foo
dest-dir=~/bin
関連する問題
- 1. Railsは:私が展開したとき
- 2. 高速バイナリ検索のための展開されたツリーとして展開されたツリー
- 3. 詳細オプションをクリックするとドロップダウンリストが展開されます
- 4. バックボーン展開されたビューとゾンビ
- 5. Web.configの変換と展開のオプション?
- 6. トップバナーが展開されたときにサイトを縮小する
- 7. アプリケーションが破壊/展開されたときに実行
- 8. rowdetailsが展開されたときにハイライト行
- 9. パッケージ化されたアーカイブと展開されたアーカイブの違い
- 10. ページが更新されたときにヒーローで展開されたVue + Webpackアプリ
- 11. エンコードパラメータはURL代替オプションとして渡されますか?
- 12. 辞書は、パラメータとして渡されたときに、
- 13. リストをオプションとして渡すargparseオプション
- 14. 展開しようとしたときにアクティブサポートが難しい
- 15. メタプログラミングを使用して展開されたネストされたループ
- 16. ブルーグリーン展開とローリング展開
- 17. Silverlight PivotViewerアプリケーションがIISに展開されたときに表示されない
- 18. コンテンツが展開されたときにスティッキーフッタが表示される
- 19. ドロネー展開されたリーフレットタイルレイヤー
- 20. キャレットをクリックしたときにulを展開して崩壊させよう
- 21. ソフトキーボードが表示されているときにスナップバーが展開される
- 22. Herokuが展開したDjangoのWebページは、DBが変更されたときに更新されません。
- 23. 開かれたときに、viewPanelでカテゴリ化された列の一部のみを展開します。
- 24. 展開オプションPlay Framework v1.4
- 25. ASP.NETコアの展開オプション
- 26. 戦争の展開エラーが私は私のwarファイルを展開していたときに
- 27. イメージを表示するときにImageViewが展開される
- 28. バーボンアコーディオンクリックしたときに一度クリックして展開/折りたたむ
- 29. WebContentフォルダーが展開されたアプリケーションと同期していない
- 30. IntelliJ IDEAで展開されたマルチモジュールプロジェクトを展開する
私はまた、「パーサがマークされた単語を文に気づきました(**コマンド名に先行するもの)とリダイレクトは後の処理のために保存されます。したがって、コマンドの後の "destdir =〜/ test"は、有効な割り当てとしてマークされていない可能性があります。次にそれを説明する方法? – lisper
'set -k'シェルオプションのために、変数割り当てができます。私の推測では、パーサーはそのオプションが設定されているかどうかをチェックせず、有効な割り当てとなるものをマークします。構文解析が完了した後(ティルド展開を含む)、解析されたコマンドを評価するコードは、 'set -k'に従って、コマンドに続く代入が評価されるべきかどうかを調べることができます。変数の割り当てを最初に特定するときに 'set -k'を無視するのは、bashのバグだと主張することができます。 – chepner
私はそれを手に入れます。非常に素晴らしい説明をありがとう。 – lisper