我是 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"