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"

関連情報