bash引数をスペースを含む単一の文字列に連結します。

bash引数をスペースを含む単一の文字列に連結します。

Bash関数のすべてのパラメータを文字列で連結し、各パラメータをスペースで区切りたいとします。また、文字列全体に一重引用符を含める必要があります。

私が今まで持っているのは次のとおりです...

$array=("$@")
str="\'"
for arg in "${array[@]}"; do
    let $str=$str+$arg+" "
done
let $str=$str+"\'"

明らかにこれはうまくいきません。しかし、これを達成する方法があるかどうか疑問に思います。

ベストアンサー1

私はこれがあなたが望む効果を得ると信じています。すべてのパラメータをスペースで区切って一重引用符で囲まれた文字列に入れます。

str="'$*'"

$*$IFSデフォルトでは、空白の最初の文字で区切られたすべてのスクリプト引数を生成します。

二重引用符で囲まれた文字列内では、一重引用符をエスケープする必要はありません。

はい

上記をスクリプトファイルに入れてみましょう。

$ cat script.sh 
#!/bin/sh
str="'$*'"
echo "$str"

次に、サンプルパラメータを使用してスクリプトを実行します。

$ sh script.sh one two three four 5
'one two three four 5'

スクリプトはPOSIXです。で動作しますbashが、必須ではありませんbash

バリエーション: スペースの代わりにスラッシュで連結

以下を調整して、スペースを別の文字に変更できますIFS

$ cat script.sh 
#!/bin/sh
old="$IFS"
IFS='/'
str="'$*'"
echo "$str"
IFS=$old

たとえば、

$ sh script.sh one two three four       
'one/two/three/four'

おすすめ記事