[英]How to quote a variable in bash script
我有一個命令,我需要在一個bash腳本中運行,該腳本獲取前一個命令的輸出並將其插入到一個新命令中。
例如: VARIABLE=$(cat "file.txt" | grep "text")
然后在另一個命令中使用該變量:
mycommand -p "$VARIABLE"
捕獲的是$ VARIABLE將始終包含特殊字符,即$和/我需要的所以我需要單引號,以便特殊字符采用文字。
我試過了\\""$VARIABLE"\\"
哪個\\""$VARIABLE"\\"
。
我想要完成的是我需要從包含我的搜索詞的文本文件中獲取一行,這是唯一的,只有一行會擁有它。
然后我需要輸入那條線(好吧,一半,我也在切割線並使用后半部分)到另一個命令。 我能夠成功地獲取我需要的文本,然后我通過回顯變量來驗證。 問題是變量包含$和\\,它們被解釋為特殊字符。
例如:
my command -p $345$randomtext\\.moretext
沒有單引號變量,它被解釋為拋出錯誤。
如果應該像你在這里寫的那樣工作(假設我正確地解析了亂碼格式):
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
cat file | grep pattern
是貓的無用 ; 只需使用grep pattern file
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.