如何在bash脚本中引用变量

时间:2016-10-31 05:35:45

标签: linux bash shell

我有一个命令,我需要在bash脚本中运行,该脚本获取上一个命令的输出并将其插入到新命令中。

所以例如: VARIABLE=$(cat "file.txt" | grep "text")

然后在另一个命令中使用该变量:

mycommand -p "$VARIABLE"

$ VARIABLE将始终包含特殊字符,即我需要的$和/,因此我需要单引号,以便特殊字符采用字面意思。

我尝试了\""$VARIABLE"\"但没有效果。

我想要完成的是我需要从包含我的搜索词的文本文件中获取一行,这是唯一的,只有一行会拥有它。

然后我需要输入那条线(好吧,其中一半,我也在切割线并使用后半部分)到另一个命令。我能够成功地获取我需要的文本,然后我通过回显变量来验证。问题是变量包含$和\,它们被解释为特殊字符。

例如:

my command -p $345$randomtext\.moretext

如果没有单引用变量,则会解释该变量会引发错误。

1 个答案:

答案 0 :(得分:3)

如果你应该在这里编写它(假设我正确地解析了乱码格式):

VARIABLE=`cat "file.txt" | grep "text"`
mycommand -p "$VARIABLE"

如果在搜索结果中处理特殊字符时遇到问题(除了null,不能存储在shell变量中),那么它们几乎肯定是由于mycommand中的错误处理,而不是它是如何处理的调用。这是一个例子:

$ cat file.txt 
There are some $special \characters\\\\ in this text file.
This is another line of text.
$text $VARIABLE $HOME etc.
$ VARIABLE=`cat "file.txt" | grep "text"`
$ printargs -p "$VARIABLE"
Got 2 arguments:
    '-p'
    'There are some $special \\characters\\\\\\\\ in this text file.\nThis is another line of text.\n$text $VARIABLE $HOME etc.'

printargs是一个简单的python程序,它打印出其参数的pythonic表示(注意它将所有反斜杠加倍,并将换行符打印为'\ n',因为这就是你编写它们的方式在python字符串中):

#!/usr/bin/python

import sys

print "Got", len(sys.argv)-1, "arguments:"
for arg in sys.argv[1:]:
    print "    " + repr(arg)
顺便说一句,我有几个风格建议:对shell变量使用小写名称以避免与具有特殊含义的环境变量发生冲突(例如,分配给$PATH会导致麻烦)。此外,cat file | grep patternuseless use of cat;只需使用grep pattern file