シェルスクリプトで長いコマンドを分割する

シェルスクリプトで長いコマンドを分割する

私はUnixシェルスクリプトを書いてきましたが、正しいフォーマットの経験はありません。単一のコマンドを実行するために長い行を書く必要がある状況がたくさんあります。

問題は、長いシェルコマンドラインを複数行に分割しますが、単一のコマンドで実行する方法はありますか?

ベストアンサー1

単一の単純なコマンドの長い行は、次のように改行文字をエスケープして分割できます。

rsync --archive --itemize-changes \
    "$source" \
    "$target"

バックスラッシュはその行の最後の文字でなければなりません。

POSIX規格の関連ビット:

2.2.1 エスケープ文字(バックスラッシュ)

引用符なしのAは、<backslash>a以外の後続の文字のリテラル値を保持する必要があります<newline>。が<newline>後に来ると、<backslash>シェルはそれを行の連続として解釈します。入力をトークンに<backslash>分割する前に削除する必要があります。<newline>エスケープ文字は<newline>入力から完全に削除され、スペースで置き換えられないため、トークン区切り文字として使用できません。

パイプやリストなどの単一の複合コマンド内には、エスケープする必要がない改行文字の自然な点があることがよくあります(およびはコマンド&&ターミネーターなので)。|||

[ -e "$pathname" ] &&
printf 'Removing %s\n' "$pathname" &&
rm -- "$pathname"
awk -f script.awk <infile |
grep -e "$pattern" |
cat header.txt - >result.txt

おすすめ記事