次のスクリプトがあります。
#!/bin/bash
function consoleWriteLine() {
echo $* >&2
}
consoleWriteLine " indented by 4 spaces"
実行すると、次の出力が得られます。
$ ./test.sh
indented by 4 spaces
私の4つのスペースはどこに行きましたか?そして、どうすればそれらを取り戻すことができますか?
次のスクリプトがあります。
#!/bin/bash
function consoleWriteLine() {
echo $* >&2
}
consoleWriteLine " indented by 4 spaces"
実行すると、次の出力が得られます。
$ ./test.sh
indented by 4 spaces
私の4つのスペースはどこに行きましたか?そして、どうすればそれらを取り戻すことができますか?
回答:
echo
関数で引用するだけです:
function consoleWriteLine() {
echo "$*" >&2
}
echo
スペースで区切られた複数の引数に気づき、それらを1 つのスペースで区切って出力します。見る:
$ echo a b c
a b c
$ echo a b c
a b c
$ echo "a b c"
a b c
最後の例では文字列がa b c
ある1つの引数とecho
そのまま編。
$*
、変異体は$@
、具体的に展開するために作成された別の言葉引用されたときに:"$@"
いくつかの引数することができ、"$*"
常に一つだけです。echo
違いのない数少ないコマンドの1つです。
私自身もこの問題を抱えていましたが、
このブログのとおり、デフォルトでは空白が含まれているためIFSを変更する必要があるため、「xxx yyy zzzz」は、間に空白がある3つの文字列として表示されます。
IFS='\n'
コマンドの前に修正し、IFSの設定を解除して変更を削除します
unset IFS
consoleWriteLine
でした。2回目にはecho
、空白を追加の引用符で再度保持する必要があります。私はあなたが引用符を置くことができるとは決して思っていませんでした$*
。