簡體   English   中英

如何在bash中轉義轉義的報價

[英]How to escape escaped quote in bash

我嘗試使用“ c”參數運行python代碼:

python3 -c $'import sys\nfor r in range(1): print(\'rob\')'

可行,打印

rob

但我想打印報價:

I'm a rob

這當然不起作用:

python3 -c $'import sys\nfor r in range(10): print(\'I'm rob\')'

如何實現呢?

您將如何在Python中編寫該字符串? 如果您想將其用單引號引起來,它將類似於:

print('I\'m rob')

...這樣就變成了在$''引用的字符串內,例如:

print(\'I\\\'m rob\')

...一旦您轉義了引號 Python解釋程序解析為內部引號的文字反斜杠 從而:

python3 -c $'import sys\nfor r in range(10): print(\'I\\\'m rob\')'

順便說一句-當您可以要求shell為您完成操作時,沒有充分的理由手動執行此操作:

script=$(cat <<'EOF'
import sys
for r in range(10):
  print('I\'m rob')
EOF
)

printf '%q ' python3 -c "$script"; printf '\n'

...發射:

python3 -c $'import sys\nfor r in range(10):\n  print(\'I\\\'m rob\')'

...您實際上可以將其作為代碼運行。 (或者,您也可以在上述基於heredoc的定義之后運行python3 -c "$script" ,它將調用您的腳本,而無需在任何地方涉及手工轉義的代碼副本)。

print使用轉義的雙引號應該可以工作:

python3 -c $'import sys\nfor r in range(10): print(\"I\'m rob\")'

按照@pault所說,但有進一步的解釋。

這是行不通的,因為您要結束字符串並以引號開頭,這是因為您使用了單引號來聲明字符串。 通過使用雙引號來聲明字符串,可以很容易地解決此問題。

python3 -c $'import sys\nfor r in range(10): print("I\'m rob")'

如果您沒有在Python腳本中使用其他任何參數,請將字符串作為參數傳遞,以減少所需的嵌套引用量。

python3 -c $'import sys\nfor r in range(1): print(sys.argv[1])' "I'm a rob"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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