パラメータ拡張を使用して変数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は何も印刷せずに空白行を印刷します。$fpath
print -rC1 -- $fpath
print -rl
printf '%s\n'
print -rC1 -- "$array[@]"
おそらく、1行に1つの配列要素を印刷したいものに最も近いでしょう。bash
/にksh
書くことができます。
[ "${#array[@]}" -eq 0 ] || printf '%s\n' "${array[@]}"