これは、echo $var
割り当てられたばかりの値とは異なる値を示す可能性がある一連のケースです。これは、割り当てられた値が「二重引用符で囲まれた」、「単一引用符で囲まれた」、または引用符で囲まれていないに関係なく発生します。
シェルで変数を正しく設定するにはどうすればよいですか?
アスタリスク
予想される出力はですが/* Foobar is free software */
、代わりにファイル名のリストが表示されます。
$ var="/* Foobar is free software */"
$ echo $var
/bin /boot /dev /etc /home /initrd.img /lib /lib64 /media /mnt /opt /proc ...
角括弧
期待される値はですが[a-z]
、代わりに1文字が表示されることがあります。
$ var=[a-z]
$ echo $var
c
改行(改行)
期待される値は個別の行のリストですが、代わりにすべての値が1行にあります!
$ cat file
foo
bar
baz
$ var=$(cat file)
$ echo $var
foo bar baz
複数のスペース
慎重に配置されたテーブルヘッダーを期待していましたが、代わりに複数のスペースが消えるか、1つにまとめられます。
$ var=" title | count"
$ echo $var
title | count
タブ
2つのタブで区切られた値を期待していましたが、代わりに2つのスペースで区切られた値を取得しました!
$ var=$'key\tvalue'
$ echo $var
key value
var=$(cat file)
大丈夫ですがecho "$var"
、必要です。