printf가 형식화 대신 문자열을 수행하는 이유

printf가 형식화 대신 문자열을 수행하는 이유

나는 bash 스크립팅을 처음 접했습니다.

printf를 사용하여 실행할 준비가 된 명령의 형식을 지정하고 변수에 할당하고 싶습니다.

그러나 즉시 실행됩니다. /opt/cinar/packages/libcnrhttp2_* 명령 문자열에 문자열로 쓰는 것이 아니라 나열하는 것입니다 .

나는 이것을 기대하고 있습니다 :

ssh [email protected] ls /opt/cinar/packages/libcnrhttp2_* -lr | awk 'NR==1'

여기에 이미지 설명을 입력하세요.

#!/bin/bash
declare -r libcnrhttp2="libcnrhttp2_"
declare -r root="/opt/cinar/packages"
declare -r destination="/opt/cinar/packages"
declare -r id=ctopkaya
declare -r host=192.168.13.137
declare -r remote=$id"@"$host

declare cmd=""
printf -v cmd ssh %s ls %s/%s* -lr | awk 'NR==1' $remote /opt/cinar/packages libcnrhttp2_

cd $destination
echo "--------------"
echo $cmd
echo "--------------"

답변1

텍스트 형식을 지정해야 하는 명령은 큰따옴표 안에 있으므로 인쇄할 텍스트로 처리됩니다. 명령의 결과를 인쇄하려면 명령을 내부에 넣으십시오 $()(명령 대체). 예:

printf "$(printf foo | awk 'NR==1') bar"

관련 정보