是否有一个单行使用读取主机的默认值?

blu*_*eys 15 powershell refactoring

我写了类似的东西来指定提示的默认值.

$defaultValue = 'default'
$prompt = Read-Host "Press enter to accept the default [$($defaultValue)]"
if ($prompt -eq "") {} else {
    $defaultValue = $prompt
    }
Run Code Online (Sandbox Code Playgroud)

可以进一步缩短吗?

这是我的尝试.

$defaultValue = 'default'
$prompt = Read-Host "Press enter to accept the default [$($defaultValue)]"
if (!$prompt -eq "") {$defaultValue = $prompt}
Run Code Online (Sandbox Code Playgroud)

我想要一个单行,所以在那之前我会坚持接受答案.

Nb $defaultValue应独立于一个衬管存放.与上面的例子类似.

我接受了答案,它引导我找到我想要的解决方案.

$defaultValue = 'default'
if (($result = Read-Host "Press enter to accept default value $defaultValue") -eq '') {$defaultValue} else {$result}
Run Code Online (Sandbox Code Playgroud)

对于那些问你原因的人.原因是因为跟随我的人眼睛更容易.在不牺牲清晰度的情况下,总是更少.恕我直言.

编辑;

而不是一行,也许我应该说一个短语?我添加了这个编辑澄清,而我看到的一些答案使用的是分号.

mjo*_*nor 22

$defaultValue = 'default'
$prompt = Read-Host "Press enter to accept the default [$($defaultValue)]"
$prompt = ($defaultValue,$prompt)[[bool]$prompt]
Run Code Online (Sandbox Code Playgroud)

如果你绝对必须在一行中:

$defaultValue = 'default'
($defaultValue,(Read-Host "Press enter to accept the default [$($defaultValue)]")) -match '\S' |% {$prompt = $_}
Run Code Online (Sandbox Code Playgroud)

  • 为什么?有什么可能的原因需要一个班轮?你来自perl背景吗? (9认同)
  • 我把它包装成一个函数:`function Read-Default($ text,$ defaultValue){$ prompt = Read-Host"$($ text)[$($ defaultValue)]"; return($ defaultValue,$ prompt)[[bool] $ prompt]; }` (3认同)
  • @granadaCoder - 将 $prompt 的值转换为布尔值(真/假)。如果它为空,它将是 $false。如果不为空,它将是 $true。然后将其隐式转换为 [int] 以用作数组索引(如果 $false 为 0,如果 $true 为 1)。 (2认同)

小智 15

我能想到的最短版本:

if (!($value = Read-Host "Value [$default]")) { $value = $default }
Run Code Online (Sandbox Code Playgroud)

此版本不必使用其他。

  • 对于 PowerShell 7:`$value = ($v = 读取主机“值”) ? $v : '默认'` (3认同)

ojk*_*ojk 11

if(($result = Read-Host "Press enter to accept default value [default]") -eq ''){"default"}else{$result}
Run Code Online (Sandbox Code Playgroud)