Пользователи powershell! Если я запускаю powershell как оболочку и набираю команды одну за другой - все в порядке. Но если я помещаю команды в файл .ps1 и пытаюсь выполнить его, я получаю странную ошибку:
The term '=' is not recognized as the name of a cmdlet, function, script file, or operable program
тестовый сценарий, который я запускаю:
echo "$pw = 2" > ./test.ps1
echo '$pw' >> ./test.ps1
pwsh ./test.ps1
Я использую pwsh в linux (установлен с https://packages.microsoft.com/rhel/7/prod/) если это имеет значение.
пробовал использовать "$ pw = 2` - результат тот же.
Да, я знаю о длинной форме установки и получения переменной:
echo "set-variable -name 'pw' -value '2'" > ./test.ps1
echo "get-variable -name 'pw'" >> ./test.ps1
pwsh ./test.ps1
Оно работает. Но мне нужны более сложные сценарии, в которых практически невозможно использовать get-variable.
Помогите пожалуйста - что я делаю не так?
Вам нужно избежать $
знак доллара, обозначающий имя переменной.
# command # result
Set-StrictMode -Off # uninitialized variables are assumed to have a value of 0 (zero) or $null
echo "$pw = 2" # = 2
Set-StrictMode -Version Latest # Selects the latest (most strict) version available
echo "$pw = 2" # throws an error: The variable '$pw' cannot be retrieved because it has not been set.
echo '$pw = 2' # $pw = 2 (used single quotes)
echo "`$pw = 2" # $pw = 2 (used backtick escape character)
редактировать приведенный выше пример был протестирован в Windows Powershell. Однако он работает с теми же результатами в WSL. Ubuntu
оболочка, опуская все Set-StrictMode
вещи и используя \
escape-символ обратной косой черты, как показано ниже:
# command # result
echo "$pw = 2" # = 2
echo '$pw = 2' # $pw = 2 (used single quotes)
echo "\$pw = 2" # $pw = 2 (used backslash escape character)
Ссылка: