2017-05-26 9 views
0

Powershell内で式を使用するときに関数を呼び出す方法はありますか?関数を式で使用することができます

私は次のようなものを試していますが、最後の行はエラーYou must provide a value expression...を返します。

function quote($str) { 
    return """" + $str + """"; 
}; 
$a= "abc: " + quote('hi'); # <-- Doesn't Work 

私は中間変数に引用符を割り当ててから、私は簡単な構文があると期待していますが連結($q=quote('hi'); $a="abc: " + q$)を行うことができます実現しています。

+1

、一点のクマ:PowerShellは、引数の周りにカッコで関数を呼び出すには、通常は_WRONG_です。何らかの技術的な理由から、時々動作するように見えますが、あなたが何をしているのか分からない限り、 'quote( 'hi')ではなく' quote 'hi''を使うほうがずっと良いです。 [this so answer](https://stackoverflow.com/a/15883080/115690)で指摘しているように、関数を呼び出すにはいくつかの間違った方法がありますが、正しい方法は2つしかありません。 –

答えて

2

あなたは何を意味するか、このです:

function quote($str) { 
    return """" + $str + """"; 
}; 
$a= "abc: " + $(quote('hi')); 

# edit: as per Joey's comment, this will also work: 
$a= "abc: " + (quote('hi')); 

編集

PowerShellの構文を使用して再書かれた:

# Function name is verb-noun, from approved verbs 
# https://msdn.microsoft.com/en-us/library/ms714428(v=vs.85).aspx 

Function Add-Quote{ 

    # parameters this function takes 
    param([string]$str) 

    # No need for return and semi colon. 
    # I tend to use return as it makes my code reading easier 
    """" + $str + """" 
} 

$a = "abc: " + (Add-Quote -str 'hi') 
+0

それだけです。正確に私が探していたもので、とてもシンプルです。 – webwake

+1

ここでは部分式は必要ありません。単純なかっこで十分です。 – Joey

+1

引数を関数にカッコで括る必要もありません。これは、複数の引数を関数に渡すことが期待どおりに機能しない悪い習慣を生み出します。 – Joey

1

あなたは文字列を挿入する形式の演算子-fを使用することができます。強調それは@ gms0ulmanの回答にコメントで指摘してきたが

function quote { 
    param($str) 
    "`"$str`"" 
} 
$a = 'abc: {0}' -f (quote 'hi') 
関連する問題