powershell - заново инициировать переменную из параметров - PullRequest
1 голос
/ 29 февраля 2020
param ([string]$command = "sh script.sh $ID some_text") 
$ID = "111"
$command 

При первом выполнении я получаю вывод для $command - sh script.sh some

Без изменения $command в параметре мне нужно вывести - sh script.sh 111 some при первом выполнении.

Это возможно? Любая техника, чтобы работать над этим?

Ответы [ 3 ]

1 голос
/ 29 февраля 2020

Просто установите параметр command, чтобы использовать строковый заполнитель для спецификатора формата, который будет изменен позже.

param($command = "sh script.sh {0} some_text")
$ID = 111
$command -f $ID

Если вам нужно обновить $command, просто поместите {0} там, где вы хотите, чтобы произошла замена.


Примеры:

# Function that contains your code
# command is defined as a parameter
# assume something else within the function sets $ID

function Start-MyCommand {
    param([string]$command = "sh script.sh {0} some_text")

    $ID = 111
    $command -f $ID
    $ID = 222
    $command -f $ID
}

# Run the function without a parameter
Start-MyCommand
sh script.sh 111 some_text
sh script.sh 222 some_text

# Run the function with command parameter
Start-MyCommand -Command "sh newscript.sh {0} more_text"
sh newscript.sh 111 more_text
sh newscript.sh 222 more_text
0 голосов
/ 29 февраля 2020

Если переменная $ID не определена, строка команды будет иметь текст по умолчанию, но, разумеется, расширять эту переменную нечем.

Единственный другой способ, которым я могу думать, - это то, что эта переменная также является параметром для сценария. Примерно так:

param ([int]$ID = 111,
       [string]$command = "sh script.sh $ID some_text"
) 

Результат:

sh script.sh 111 some_text
0 голосов
/ 29 февраля 2020

Это легко. Просто объявите переменную $ ID в начале функции:

function function_name {
  $ID = "111"
  param ([string]$command = "sh script.sh $ID some_text") 
  $command 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...