Bash命令输出存储在变量中时会发生更改

Bash命令输出存储在变量中时会发生更改,bash,command-line,Bash,Command Line,当我运行命令时: git lg--since=“24小时前”| tail-1 我得到了预期的结果: *f71da17-废话废话(12小时前) 但是,当我将此输出存储在变量中并将其回显到控制台时: last_commit=$(git lg--since=“24小时前”| tail-1);echo$last_commit 我得到了意想不到的结果: dir1/dir2/dir3/file1 file2 file3*f71da17-诸如此类(12小时前) 它将当前目录中的每个文件前置到输出。任何关于正在

当我运行命令时:

git lg--since=“24小时前”| tail-1

我得到了预期的结果:

*f71da17-废话废话(12小时前)

但是,当我将此输出存储在变量中并将其回显到控制台时:

last_commit=$(git lg--since=“24小时前”| tail-1);echo$last_commit

我得到了意想不到的结果:

dir1/dir2/dir3/file1 file2 file3*f71da17-诸如此类(12小时前)


它将当前目录中的每个文件前置到输出。任何关于正在发生的事情的见解都将不胜感激

变量值中的
*
正在全局展开,因为您没有引用展开


使用
echo“$last\u commit”
变量值中的
*
正在全局展开,因为您没有引用展开


使用
echo“$last\u commit”

git命令实际上是一组围绕
git
的命令,并以
git
后面的特定命令结束。
git lg
是什么意思?
git
命令实际上是一组围绕
git
的命令,并以
git
后面的特定命令结束。git lg是什么意思?不过,我可能会在作业周围加上引号。@Dru:那没用;分配不会进行分词或路径名扩展,因此不需要引号。在bash手册页中,“如果[process]替换出现在双引号内,则不会对结果执行分词和文件名扩展。”因此,如果不是用双引号括起来的话……@Dru:虽然我认为阅读bash手册页非常酷,但不应该在其中插入单词。您引用的句子在字面上是正确的,但这并不意味着它们将在未引用的命令替换上执行,在这种情况下,这些事情不会发生在未使用qout的字符串上,变量赋值就是其中之一。请参阅“简单命令扩展”中的步骤4:“=…后面的文本在分配给变量之前经历了波浪线扩展、参数扩展、命令替换、算术扩展和引号删除。”@Dru:或者您可以尝试一下。1:
a=*;回声“$a”
2:
a=“*”;echo$a
不过,我可能会在作业周围加上引号。@Dru:那没用;分配不会进行分词或路径名扩展,因此不需要引号。在bash手册页中,“如果[process]替换出现在双引号内,则不会对结果执行分词和文件名扩展。”因此,如果不是用双引号括起来的话……@Dru:虽然我认为阅读bash手册页非常酷,但不应该在其中插入单词。您引用的句子在字面上是正确的,但这并不意味着它们将在未引用的命令替换上执行,在这种情况下,这些事情不会发生在未使用qout的字符串上,变量赋值就是其中之一。请参阅“简单命令扩展”中的步骤4:“=…后面的文本在分配给变量之前经历了波浪线扩展、参数扩展、命令替换、算术扩展和引号删除。”@Dru:或者您可以尝试一下。1:
a=*;回声“$a”
2:
a=“*”;echo$a