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