長いコマンドでスクリプトを整理したいので、たとえば次のようにします。
{ somecheck || somecomand "reallyreallyreallyreallyreallyreallylongstring" } &> /dev/null &
次のようになります:
{ somecheck || \
somecomand "reallyreally" \
"reallyreally" \
"reallyreally" \
"longstring" \
} &> /dev/null &
しかし、単語の分割が心配です。それを避けるために、私はこれを検討しています:
{ somecheck || \
somecomand "$(echo \
"reallyreally" \
"reallyreally" \
"reallyreally" \
"longstring" \
)" \
} &> /dev/null &
Bash/zshで複数行の文字列を実行する他の方法を知っている人はいますか?この情報をグーグル検索するのに問題があります。これは少なくとも3つのプロセス(スクリプト、バックグラウンドブロック、およびコマンド置換サブシェル)を意味すると思います。多分もっと良い方法がありますか?
前もって感謝します!
このような行の継続を使用すると、文字列にスペースが追加されます。シーケンスbackslash-newline-whitespace
は1つのスペースに置き換えられます。
変数を使用するだけで、読みやすさが向上します。
url="reallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallylongstring"
{ somecheck || somecomand "$url" } &> /dev/null &
配列を使用して、それを部分文字列に分割することもできます
parts=(
"reallyreallyreallyreally"
"reallyreallyreallyreally"
"reallyreallyreallyreally"
"reallyreallyreallyreally"
"longstring"
)
whole=$(IFS=; echo "${parts[*]}")
しかし、追加された複雑さを考慮して、リテラル文字列を分割することはそれほど重要ですか?
さて、あなたはそれを少し単純化して次のようにすることができます:
$ [ -f /dev/null ] || sed 's/a/A/g' <(echo "thisis""avery"\
"long""string"\
"Ihave""separated"\
"into""smaller"\
"substrings")
thisisAverylongstringIhAvesepArAtedintosmAllersubstrings
重要な点は、入力文字列に余分な空白を入れないことです。したがって、\
の周りに空白を入れないでください。
変数を使用するというGlennの提案は、より美しく、より単純ですが、それに合わせてください。
Glennの2つの提案の中間にあるアプローチを提案します。(単純なスカラー)変数を使用しますが、その定義を複数の行に分割します。
myword="super"
myword="${myword}cali"
myword="${myword}fragil"
myword="${myword}istic"
myword="${myword}expi"
myword="${myword}ALi"
myword="${myword}docious"