実行する前に1行ずつ書き込んで、2回書きないでください。

実行する前に1行ずつ書き込んで、2回書きないでください。

オプションを含むbashスクリプトを書いており、--verbose実行する前にほとんどの行を作成したいと思います。

xinput --set-prop "$TP" "Device Accel Constant Deceleration" $TOUCHPAD_DECELERATION

引用符を含む出力を取得したいが、変数を使用して実行すると、ユーザーはコマンドをコピーして貼り付けて再実行できます。

これは(コマンドに引用符が多ければますます複雑になる)解決策で、行を2回作成します。

echo 'xinput --set-prop "'"$TP"'" "Device Accel Constant Deceleration" '"$TOUCHPAD_DECELERATION"
xinput --set-prop "$TP" "Device Accel Constant Deceleration" $TOUCHPAD_DECELERATION

この行の結果を2回書かずにechoを使ってどのように書くことができますか?

ベストアンサー1

このオプションを使用できますset -xset -x〜する:

コマンド、大/小文字コマンド、選択コマンド、および算術コマンドを含む単純なコマンドのトレース、およびその引数または拡張後および実行前に関連する単語のリストを印刷します。 PS4変数の値が拡張され、結果の値がコマンドおよび拡張引数の前に印刷されます。

あなたが書いている場合:

set -x
var="Hello world"
echo "I say: " $var

その後、出力は次のようになります。

+ var='Hello world'
+ echo 'I say:' Hello world
I say: Hello world

+はい値PS4。これを抑制するには、行PS4=の後に追加するか、set -x別のPS4値に設定して変更します。

set -xとして有効にすることもできますset -o xtrace。オプションを再度無効にするには、を使用しますset +x

一部のコマンドのみを印刷するには、サブシェルで実行できます。

( set -x ; echo "I say: " $var )
+ echo 'I say:' Hello world
I say: Hello world

コマンドを括弧内に入れると、そのコマンドset -xにのみ適用され、最後に自動的に無効になります。

おすすめ記事