次のような長いコマンドでいくつかのスクリプトを設定したいと思います。
{ 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つのプロセス(スクリプト、背景ブロック、およびコマンド代替サブシェル)を意味するようです。より良い方法がありますか?
よろしくお願いします!
ベストアンサー1
このように行連続を使用すると、文字列にスペースが追加されます。シーケンスはbackslash-newline-whitespace
単一のスペースで置き換えられます。
変数を使用するだけでも可読性が大幅に向上します。
url="reallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallylongstring"
{ somecheck || somecomand "$url" } &> /dev/null &
それでも配列を使用して部分文字列に分割できます。
parts=(
"reallyreallyreallyreally"
"reallyreallyreallyreally"
"reallyreallyreallyreally"
"reallyreallyreallyreally"
"longstring"
)
whole=$(IFS=; echo "${parts[*]}")
しかし、追加された複雑さを考えると、リテラル文字列を分割することは本当に重要ですか?