シェルスクリプト変数にスペースを保存する

シェルスクリプト変数にスペースを保存する

変数に特定の数のスペースを格納する必要があります。

私はこれを試しました:

i=0
result=""
space() {
    n=$1
    i=0
    while [[ "$i" != $n ]]
    do
        result="$result "
        ((i+=1))
    done
}

f="first"
s="last"
space 5

echo $f$result$s

結果は「firstlast」ですが、「first」と「last」の間には5つ​​の空白文字が必要でした。

どうすれば正しくできますか?

ベストアンサー1

コマンドに二重引用符(")を使用してくださいecho

echo "$f$result$s"

これは、echoが変数を引数として解釈し、複数の引数が引数の間にスペースを含むechoすべての変数を印刷するためです。

この例を見てください。

user@host:~$ echo this is     a      test
this is a test
user@host:~$ echo "this is     a      test"
this is     a      test

最初に4つのパラメータがあります。

execve("/bin/echo", ["echo", "this", "is", "a", "test"], [/* 21 vars */]) = 0

2番目には1つしかありません。

execve("/bin/echo", ["echo", "this is     a      test"], [/* 21 vars */]) = 0

おすすめ記事