将命令输出分配给Shell变量

10

我正在尝试将cut命令的输出赋值给一个变量,但是遇到了一个奇怪的问题。 我正在使用tcsh shell。

$echo $0
tcsh

我正在运行的命令是:

$set a=`cut -f2 -d' ' test.txt`
Missing }.    //This is the output I am getting

现在,这个文件非常简单(好吧,其实这不是我正在处理的文件,但我把问题简化到了这个文件上)。

Test.txt:

{ {corner

就是这样!这就是文件。如果我将文件更改为这个:

{ {corner}

代码可以运行,但是变量"a"得到了以下的值:

$echo $a
corner   //Please note its not {corner} but corner
因此,我认为shell试图将{corner作为命令执行,由于缺少闭合大括号而导致shell报错。有人知道为什么会出现这种情况吗?我的理解是它应该只是将cut的输出分配给变量,但看起来它正在递归地分配它! 新手
1个回答

10

你需要将它用双引号括起来。

set a="`cut -f2 -d' ' test.txt`"

在类似于echo的用法中同样适用。

echo "$a"

输出

{corner

那样不会按照原作者的意图工作。那只会将“Missing }”分配给a。 - Ketan Maheshwari
不是这样的!尝试使用 echo "$a" 而不是 echo $a。但我很困惑为什么我们要这样做? - Richeek
我的错。在回显 $a 时,我忘记加双引号了。 - Ketan Maheshwari
我遇到了类似的问题,但这个解决方案对我没有用。我试图使用set line1="head -1 file.csv"将文件的第一行重定向到一个变量中,然后当我运行echo "$line1"时,它打印出了head -1 file.csv。这里出了什么问题? - Lou
啊,不用管了,当我使用“`”符号而不是“””符号来围绕命令时,它就能正常工作。 - Lou

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接