src/Format-ViewerInvocationSh.ps1

#!/usr/bin/env pwsh
$ErrorActionPreference = "Stop"
Set-StrictMode -Version Latest


<#
.SYNOPSIS
    Formats a string that can be used to invoke a file-viewing binary from within a POSIX shell.
.DESCRIPTION
    Formats a string that can be used to invoke a file-viewing binary from within a POSIX shell.
    Useful for populating environment variables.
.PARAMETER Bin
    The path to the binary to execute.
.PARAMETER BinArgs
    The arguments to pass to the binary.
.OUTPUTS
    A string that can be used to invoke a file-viewing binary from within a POSIX shell.
#>

function Format-ViewerInvocationSh {
    param(
        [Parameter(Mandatory = $true, Position = 0, ValueFromPipelineByPropertyName = $true)]
        [ValidateNotNullOrEmpty()]
        [string] $Bin,

        [Parameter(Mandatory = $false, Position = 1, ValueFromPipelineByPropertyName = $true)]
        [string[]] $BinArgs = @()
    )
    Write-Debug "Format-ViewerInvocationSh: `$Bin: $($Bin)"
    Write-Debug "Format-ViewerInvocationSh: `$BinArgs: $($BinArgs)"
    [System.Text.StringBuilder] $result = [System.Text.StringBuilder]::new()
    if ($Bin -like "* *") {
        $result.Append("'") | Out-Null
        $result.Append($Bin) | Out-Null
        $result.Append("'") | Out-Null
    } else {
        $result.Append($Bin) | Out-Null
    }
    foreach ($arg in $BinArgs) {
        $result.Append(" ") | Out-Null
        if ($arg -like "* *") {
            $result.Append("'") | Out-Null
            $result.Append($arg) | Out-Null
            $result.Append("'") | Out-Null
        } else {
            $result.Append($arg) | Out-Null
        }
    }
    $result.ToString()
    Write-Debug "Format-ViewerInvocationSh: Result: $($result.ToString())"
    $result.Clear() | Out-Null
}