为什么 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"

相关内容