簡體   English   中英

在sh -c中轉義美元符號

[英]Escaping dollar sign in sh -c

我正在使用在bash中運行命令的應用程序。 這是它正在使用的“模板”:

sh -c '<command> "<argument>"'

請注意,我不能編輯引號,只能編輯命令和參數。 我也無法擺脫美元符號。

除非參數中有美元符號,否則此“模板”可以正常工作:

sh -c 'echo "x=test$test"'

給出以下輸出:

x=test

我如何獲得確切的輸出,即:

x=test$test

如果可以切換引號,則可以執行以下操作:

sh -c "echo '"'x=test$test'"'"
x=test$test

有什么辦法可以做到這一點?

如果您的sh -c命令是由bash (而不是由基線POSIX shell)運行的,並且您的參數不包含'文字,那么您可以做一些技巧,如下所示:

#!/bin/bash
sh -c 'echo ""'$'\'x=test$test\'""'

也就是說,字符串"'$'\\'應該放在<argument> ,而\\'"應該放在后面。

請注意,這絕對不是針對外殼注入攻擊的安全性 為此,我們需要修改argument的內部內容; 至少要用\\\\替換\\' \\'替換。


更好的方法(尤其是從安全性角度考慮)是修復您正在使用的程序,以從代碼中帶外傳遞參數。 要做到這一點,將意味着一個argv如下所示(以下適用於subprocess.Popen(cmd, shell=False) Python語法給出):

['sh', '-c', 'echo "$1"', '_', 'x=test$test']

暫無
暫無

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

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