簡體   English   中英

如何在bash腳本中引用變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM