스크립트를 실행하려고 합니다.
#!/bin/sh
A=multichain-cli chain97 issue 1XRnkvTc1Ev3q8UnSyynu1Qb9ss1E3aJWZn2bQ '{"name":"Test_Asset","open":true}' 100 echo "$A"
exit
Test_Asset을 매개변수로 전달하려고 합니다.
#!/bin/sh
B=$1 A=multichain-cli chain97 issue 1XRnkvTc1Ev3q8UnSyynu1Qb9ss1E3aJWZn2bQ '{"name":"$B","open":true}' 100 echo "$A"
exit
$B라는 이름으로 자산이 생성됩니다. 말 그대로 $B가 아닌 B의 가치로 자산을 생성하고 싶습니다.
답변1
작은따옴표 안에는 아무것도 확장되지 않습니다. 따라서 작은따옴표를 제거해야 합니다. 당신이 원하는 것이 무엇이든 상관 없습니다큰따옴표Split+glob을 적용하지 않으려면 변수가 확장되므로 다음과 같습니다.
A=$(multichain-cli issue '{"name":'"$ASSET"',"open":true}' "$D")
# '''''''' """""" '''''''''''''
printf '%s\n' "$A"
( ''''
, """""
어떤 부분이 작은따옴표이고 어떤 부분이 큰따옴표인지 표시합니다.)
아마도 $ASSET
JSON 코드의 내용을 큰따옴표 안에 넣기를 원할 것이므로 이를 포함해야 합니다(리터럴, 즉 작은따옴표 부분 내).
A=$(multichain-cli issue '{"name":"'"$ASSET"'","open":true}' "$D")
# ''''''''' """""" ''''''''''''''
$ASSET
쉘 인용에 사용되는 큰따옴표(여기서는 확장 시 분할+글로브를 방지하기 위해 )를 그대로 전달된 큰따옴표와 혼동하지 마십시오 multichain-cli
.
$ASSET
큰따옴표 자체나 백슬래시, 줄 바꿈 또는 기타 제어 문자와 같이 JSON 구문에 특수한 기타 문자를 포함하는 것을 고려할 수 있습니다. ASCII가 아닌 문자의 경우 multichain-cli
.
또는 모든 것에 대해 큰따옴표 쉘 인용을 사용할 수 있습니다.@Bex 쇼, 이는 전달하는 텍스트에서 "
s( $
, 및 도 필요함)를 백슬래시로 이스케이프해야 함을 의미합니다 \
(그리고 추가 처리를 위해 백슬래시를 사용하므로 명령 대체에 구식 구문을 사용하지 마십시오).`
multichain-cli
`...`
답변2
노력하다
ASSET="$1"
D="$2"
A="$(multichain-cli issue "{\"name\":$ASSET,\"open\":true}" "$D")"
echo "$A"
exit
변수 대체가 발생해서는 안 됩니다.단어따옴표(즉, 단일 '). 큰따옴표를 사용하고 백슬래시를 사용하여 출력에서 필수 큰따옴표를 이스케이프 처리합니다 \
.
답변3
답장을 보내주셔서 감사합니다. 해결책으로 파일에 명령을 작성한 다음 파일을 실행했습니다. 작동 방식은 다음과 같습니다.
#!/bin/sh
ASSET=$1
X=`echo "'{\"name\":\"$ASSET\",\"open\":true}'"`
A="multichain-cli chain97 issue $X 100"
echo "$A" >test.sh
B=`sh test.sh`
echo "$B"
exit