zsh パラメータ拡張

zsh パラメータ拡張

パラメータ拡張を使用して変数fpathの内容を列形式で表示しようとしましたが、失敗しました。

いくつかの試みとウェブ検索の最後に私が望んでいたまさにその解決策を見つけました。これは:

print -C1 $fpath

しかし、別の方法でこれを行う方法を知りたいです。私が得た最も近いものは次のとおりです。

echo ${fpath//' '/'\n'}

ただし、空白文字を認識できないため、「\n」置換は発生しません。私は役に立たなかった。

echo ${fpath// /'\n'}
echo ${fpath//'\t'/'\n'}

好奇心のために何が間違っているのか知りたいです。

ベストアンサー1

fpath配列です。これを文字列にダウングレードし、その中の文字を改行文字に置き換えようとしないでください。

ksh次の配列拡張構文を使用してください。

$ printf '%s\n' "${fpath[@]}"
/usr/local/share/zsh/site-functions
/usr/share/zsh/site-functions
/usr/share/zsh/5.7.1/functions

と一緒にまたはをzsh使用することもできます。"$fpath[@]""${(@)fpath}"

次のようにすることもできます。

$ printf '%s\n' $fpath
/usr/local/share/zsh/site-functions
/usr/share/zsh/site-functions
/usr/share/zsh/5.7.1/functions

ただし、配列の空の要素はスキップされます(これは問題にならない可能性があります$fpath)。

zsh組み込みprint関数はこのオプションを使用して、1行に1つの要素を印刷することもできます-l。組み込み関数がkshどこから来るかのように、任意の生データを印刷するprintオプションが必要なので、次のようになります。-r

print -rl -- $fpath

標準と同じですprintf '%s\n'

空のリストの-C1場合とは異なります。この場合、whileは何も印刷せずに空白行を印刷します。$fpathprint -rC1 -- $fpathprint -rlprintf '%s\n'

print -rC1 -- "$array[@]"

おそらく、1行に1つの配列要素を印刷したいものに最も近いでしょう。bash/にksh書くことができます。

[ "${#array[@]}" -eq 0 ] || printf '%s\n' "${array[@]}"

おすすめ記事