行全体をファイルにエコーできません

行全体をファイルにエコーできません

次の行をファイルにエコーする方法がわかりません。その一部だけがファイルに出力されます。

echo perl -e "printf(\"%.1lf%%\n\", ($reserved_block_count * 100.0 ) / $block_count);">>Show_Percent_Reserved_Blocks.sh

以下のスクリプトを実行すると、

andyk_~/Downloads$ Show_Percent_Reserved_Blocks.sh
/home/andy/bin/Show_Percent_Reserved_Blocks.sh: line 2: Block: command not found
/home/andy/bin/Show_Percent_Reserved_Blocks.sh: line 3: Reserved: command not found
syntax error at -e line 1, near "/ )"
Execution of -e aborted due to compilation errors.

#!/bin/bash
Block count:              421958912
Reserved block count:     4219589
perl -e "printf(\"%.1lf%%\n\", ($reserved_block_count * 100.0 ) / $block_count);"

答え1

問題は、二重引用符を使用しているため、変数参照 ( $reserved_block_count$block_count) が現在の (呼び出し元の) シェル環境で展開されていることです。全体を一重引用符で囲む必要があります。

echo 'perl -e "printf(\"%.1lf%%\n\", ($reserved_block_count * 100.0 ) / $block_count);"' >>Show_Percent_Reserved_Blocks.sh

関連情報