我有一个命令,我需要在bash脚本中运行,该脚本获取上一个命令的输出并将其插入到新命令中。
所以例如:
VARIABLE=$(cat "file.txt" | grep "text")
然后在另一个命令中使用该变量:
mycommand -p "$VARIABLE"
$ VARIABLE将始终包含特殊字符,即我需要的$和/,因此我需要单引号,以便特殊字符采用字面意思。
我尝试了\""$VARIABLE"\"
但没有效果。
我想要完成的是我需要从包含我的搜索词的文本文件中获取一行,这是唯一的,只有一行会拥有它。
然后我需要输入那条线(好吧,其中一半,我也在切割线并使用后半部分)到另一个命令。我能够成功地获取我需要的文本,然后我通过回显变量来验证。问题是变量包含$和\,它们被解释为特殊字符。
例如:
my command -p $345$randomtext\.moretext
如果没有单引用变量,则会解释该变量会引发错误。
答案 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 pattern
是useless use of cat;只需使用grep pattern file
。