Title: Namespace variable notation unexpectedly treats paths as wildcard expressions · Issue #9225 · PowerShell/PowerShell · GitHub
Open Graph Title: Namespace variable notation unexpectedly treats paths as wildcard expressions · Issue #9225 · PowerShell/PowerShell
X Title: Namespace variable notation unexpectedly treats paths as wildcard expressions · Issue #9225 · PowerShell/PowerShell
Description: Conceptually related: #4726. Note: Fixing this issue would technically be a breaking change. PowerShell treats the following: ${
Open Graph Description: Conceptually related: #4726. Note: Fixing this issue would technically be a breaking change. PowerShell treats the following: ${ X Description: Conceptually related: #4726. Note: Fixing this issue would technically be a breaking change. PowerShell treats the following: ${<drive>:<name>} as if you had specified: Get-Content -Pat...
Opengraph URL: https://github.com/PowerShell/PowerShell/issues/9225
X: @github
Domain: github.com
Links:
Viewport: width=device-width
Hey, it has json ld scripts:
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Namespace variable notation unexpectedly treats paths as wildcard expressions","articleBody":"\u003csup\u003eConceptually related: #4726.\u003c/sup\u003e\r\n\r\nNote: Fixing this issue would technically be a breaking change.\r\n\r\nPowerShell treats the following:\r\n\r\n ${\u003cdrive\u003e:\u003cname\u003e}\r\n\r\nas if you had specified:\r\n\r\n Get-Content -Path \u003cdrive\u003e:\u003cname\u003e # or, with assignment, Set-Content -Path ...\r\n\r\nThis notation - though often used with the `Env:` drive (e.g., `$env:Path`) - is little-known as a *general paradigm* named **_namespace variable notation_**, which is explained in [this SO answer](https://stackoverflow.com/a/55036515/45375).\r\n\r\n**The problem is the use of `-Path` rather than `-LiteralPath`** (conceptually speaking), because `-Path` **interprets its argument as a _wildcard expression_**.\r\n\r\nBy design, you can only ever target a _single_ item with namespace notation and if you intentionally specify a wildcard that resolves to _multiple_ items, the statement _breaks_.\r\n\r\n**There is no good reason for namespace notation to treat paths as wildcard expressions to begin with**, just as it makes no sense to do so for executable invocations and redirections (see #4726).\r\n\r\nThe fact that they are treated as wildcards causes problems with item names that _happen to look like_ wildcard expressions, in one of two ways:\r\n\r\n* You may not be able to create a new item, such as a new environment variable, at all.\r\n* Perhaps worse, you may inadvertently target a different, preexisting item.\r\n\r\nTaking the example of wanting to assign to / query the value of an environment variable literally named `[foo]` with `${env:[foo]}`, from [this SO question](https://stackoverflow.com/q/55343828/45375):\r\n\r\n# Steps to reproduce\r\n\r\n```powershell\r\n# Try to create env. var. literally named '[foo]'\r\n${env:[foo]} = 'bar'\r\n# Create a seemingly unrelated env. var. whose name happens to match\r\n# [foo] *if interpreted as a wildcard expression*\r\n$env:o = 'no'\r\n# Get the value\r\n${env:[foo]}\r\n```\r\n\r\n# Expected behavior\r\n\r\n```none\r\nbar\r\n```\r\n\r\nThat is, implicit creation of the variable via namespace notation should succeed, as should subsequent retrieval.\r\n\r\n# Actual behavior\r\n\r\n```none\r\nCannot find path 'env:[foo]' because it does not exist.\r\nno\r\n```\r\n\r\n* That is, implicit creation of the variable failed, because the wildcard resolution of `[foo]` matched nothing and so there was effectively no variable name to assign to / create.\r\n\r\n* `${env:[foo]}` unexpectedly retrieved the value of `${env:o}`, because `[foo]` interpreted as a wildcard matches `o`.\r\n\r\nThe **workaround** is to use _double_ `` ` ``-escaping: `${env:``[foo``]}`; that the escape char. must be doubled is an additional quirk - see #7999\r\n\r\n# Environment data\r\n\r\n```none\r\nPowerShell Core 6.2.0-rc.1\r\nWindows PowerShell v5.1\r\n```\r\n","author":{"url":"https://github.com/mklement0","@type":"Person","name":"mklement0"},"datePublished":"2019-03-25T19:17:08.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":7},"url":"https://github.com/9225/PowerShell/issues/9225"}
route-pattern /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) route-controller voltron_issues_fragments route-action issue_layout fetch-nonce v2:b9789f52-d894-43c0-862b-955fd99ead8e current-catalog-service-hash 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 request-id C93A:3F2674:878995:C26A9B:6A58C3E3 html-safe-nonce 8f2e304e9865beb90d92a13f517f5280a51282d2902236cebfedba6dd5d81947 visitor-payload eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJDOTNBOjNGMjY3NDo4Nzg5OTU6QzI2QTlCOjZBNThDM0UzIiwidmlzaXRvcl9pZCI6IjE1MzM1MzczMTYyNzQ0ODgyOTEiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ== visitor-hmac 90c01330d7dbe6d549451b5af584e309958bd3d046c5ca7fddf4fd3cfd9c0508 hovercard-subject-tag issue:425072791 github-keyboard-shortcuts repository,issues,copilot google-site-verification Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I octolytics-url https://collector.github.com/github/collect analytics-location / fb:app_id 1401488693436528 apple-itunes-app app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/PowerShell/PowerShell/9225/issue_layout twitter:image https://opengraph.githubassets.com/78375cba37b0349b3d44abe9b1640048d3c0ad07d1a2575e6d3367e8979b7ae5/PowerShell/PowerShell/issues/9225 twitter:card summary_large_image og:image https://opengraph.githubassets.com/78375cba37b0349b3d44abe9b1640048d3c0ad07d1a2575e6d3367e8979b7ae5/PowerShell/PowerShell/issues/9225 og:image:alt Conceptually related: #4726. Note: Fixing this issue would technically be a breaking change. PowerShell treats the following: ${ og:image:width 1200 og:image:height 600 og:site_name GitHub og:type object og:author:username mklement0 hostname github.com expected-hostname github.com None 5f2a0c7865178af3d91dd9f13b0cdfc3c73a2529c873d2780bb4c01271a57ec6 turbo-cache-control no-preview go-import github.com/PowerShell/PowerShell git https://github.com/PowerShell/PowerShell.git octolytics-dimension-user_id 11524380 octolytics-dimension-user_login PowerShell octolytics-dimension-repository_id 49609581 octolytics-dimension-repository_nwo PowerShell/PowerShell octolytics-dimension-repository_public true octolytics-dimension-repository_is_fork false octolytics-dimension-repository_network_root_id 49609581 octolytics-dimension-repository_network_root_nwo PowerShell/PowerShell turbo-body-classes logged-out env-production page-responsive disable-turbo false browser-stats-url https://api.github.com/_private/browser/stats browser-errors-url https://api.github.com/_private/browser/errors release 8aae7b8d6caacacf5c66eaeb2702d8dc88d85b4a ui-target full theme-color #1e2327 color-scheme light dark
URLs of crawlers that visited me.