arrays - Bash:如何从 for 循环中的多个文件的数组中删除目录的第一部分?
问题描述
我正在尝试为我编写一个管理点文件的脚本,这就是我所拥有的:
dots=(
~/.config/alacritty
~/.config/dunst
~/.config/flameshot
~/.config/i3
~/.config/i3status
~/.config/kitty
~/.config/nvim
~/.config/picom
~/.config/rofi
~/.config/gtk-3.0
~/.config/obs-studio
~/.config/sway
~/.config/waybar
~/.config/swappy
~/.config/mako
~/.config/swaylock
~/.config/Code/User/settings.json
~/.config/Code/User/keybindings.json
~/.config/fontconfig
~/.bash_logout
~/.bash_profile
~/.bashrc
~/.profile
~/.stignore
~/.gtkrc-2.0
)
for name in "${dots[@]}"; do
if [ ! -e "$name" ]; then
echo "$name does not exist."
ln -sv "$HOME/Dotfiles/dots/${name#~/.config/}" "$name"
else
echo "$name exists."
fi
done
这里的问题是它会~/.config/
从目录中删除部分~/.config/sway
,但不会删除~/
部分~/.profile
。
我的问题是,我将如何使它删除~/.config/
部分和~/
包含它们的文件的部分?
编辑:在符号链接行中echo
替换为。ln -sv
我用它替换了它,echo
以便我可以测试它是否有效。
解决方案
我的问题是,我将如何使它删除 ~/.config/ 部分和 ~/ 具有它们的文件的部分?
就个人而言,我会分两步完成,将中间结果存储在一个单独的变量中:
local_part=${name#~/}
ln -sv "$HOME/Dotfiles/dots/${local_part#.config/}" "$name"
推荐阅读
- react-native - 不变违规:[7655,“RCTView”,{“flexGrow”:“<
>"}] 不能用作本机方法参数 - swift - 快速获取可编码的属性名称作为字符串
- python - 如果其中一项任务在 asyncio 中完成,如何关闭循环
- c# - 将 ASP.NET Core 3.1 迁移到 .NET 5.0
- azure - Azure 通用 v2 存储帐户和 BlockBlobStorage 帐户之间的区别解释了吗?
- c++ - 如何检查 lua_state 是否已关闭?
- vue.js - 如何在 Vuetify 的 v-select 中禁用悬停
- javascript - K6 根据 VU Id 顺序请求 API
- python-3.x - 仅将最后一个 shell 命令的标准输出放在 Python 变量中
- csv - 是否可以使基数 60 浮动