
これは働きます:
#!/bin/zsh
### List apps ###
arch="$(paru --query --quiet --explicit --unrequired)"
repos=( $HOME/repos/./* )
npm=( $(npm list --global --parseable) )
box="${(l:20::─:)}"
print -l "${arch}" "${box}" "${repos[@]:t}" "${box}" "${npm[@]:1:t}" | column
結果:
alsa-utils foot libva-utils patch waylock
android-tools fuzzel links pdfarranger wine-gecko
anki fwupd linux-lts pinta winetricks
aria2 fzy linux-zen pkgconf wl-color-picker
auto-cpufreq github-cli lswt pkgstats wlsunset
autoconf gnu-netcat make polkit-gnome xdg-user-dirs
automake go man-db pulsemixer xorg-xeyes
base gocryptfs mdcat python-android-backup-tools zip
bison grabc meld qutebrowser zram-generator
brightnessctl greetd microsoft-edge-stable-bin ripgrep zsh-completions
calibre greetd-tuigreet moreutils river ────────────────────
cheat grive mupdf rivercarro ansiweather
cmus helix ncdu rustup bash-script-template
cups-pdf httrack neomutt speedtest-cli cheatsheets
dragon-drop imv newsboat swayidle paru
dunst intel-gpu-tools nicotine+ system-config-printer typewritten
edk2-shell intel-ucode noto-fonts-cjk tealdeer zsh-z
efibootmgr inxi noto-fonts-emoji timeshift ────────────────────
eg iwd onedrive-abraunegg tiny-irc-client vercel
fd jpegoptim pacman-contrib ufw
flex jq pandoc-bin urlview
foliate kakoune paru vscode-langservers-extracted
print -c
ただし、パイプの代わりに実行する最後の行を変更すると、垂直方向にcolumn
印刷されません。
print -c "${arch}" "${box}" "${repos[@]:t}" "${box}" "${npm[@]:1:t}"
答え1
変数$arch
は、改行文字を含む非常に長い文字列を含むスカラー変数として定義されます。
その文字列の各行を別々の引数として渡して列print -c
単位で印刷できるため、$arch
各行は別々の要素として含まれる配列になります。
一部の(空でない)出力ラインの取得は、eed文字列でパラメータ拡張フラグを分割することによって行われます${(f)"$(cmd)"}
。zsh
f
f
#! /bin/zsh -
arch=( ${(f)"$(paru --query --quiet --explicit --unrequired)"} )
repos=( ~/repos/*(N:t) )
npm=( ${${(f)"$(npm list --global --parseable)"}:t} )
sep=${(l[20][─])}
print -rc -- $arch $sep $repos $sep $npm[2,-1]
リストを別の列に印刷する場合は、区切り文字を使用する必要はありません。
paste <(print -rC1 -- $arch) \
<(print -rC1 -- $repos) \
<(print -rC1 -- $npm[2,-1]) |
expand -t 20
例:
$ paste <(seq 10) <(seq 12) <(seq 3) | expand -t20
1 1 1
2 2 2
3 3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
11
12
その他の注意事項:
- スクリプトの修飾子を参照してください
N
。隠されていないファイルがない場合、スクリプトは中断されません。~/repos
- 通常、使用したくないバックスラッシュ処理形式を実行したり、印刷したい項目からオプションを分離したりするのではなく、使用するたびにそれをデフォルトとして使用する必要があり
print
ます。後者を実行できないと、コマンド注入の脆弱性が発生する可能性があります。-r
-
--
/./
私が知っている限り、あなたのコードのコードは何もしません。隠しファイルを含めるには、D
glob修飾子を追加する必要があります。lib
最初のエントリであると仮定せずに除外するには、代わりに$npm
使用できます(私は最近追加され、ksh93 / bashとの互換性のためにのみ追加されたzshを好む)。${num:#lib}
$num[2,-1]
${num:1}
print -rC1 --
print -rl --
引数がない場合は空の行だけを印刷するので、1行に要素が1つずつあるリストを印刷するより正式な方法なので、print -l
olumnに印刷するよりも優れています。1
C