如果我执行以下简单脚本:
#!/bin/bash
printf "%-20s %s\n" "Früchte und Gemüse" "foo"
printf "%-20s %s\n" "Milchprodukte" "bar"
printf "%-20s %s\n" "12345678901234567890" "baz"
Run Code Online (Sandbox Code Playgroud)
它打印:
Früchte und Gemüse foo
Milchprodukte bar
12345678901234567890 baz
Run Code Online (Sandbox Code Playgroud)
也就是说,带有变音符号(例如ü
)的文本每个变音符号“缩小”一个字符。
当然,我在某处有一些错误的设置,但我无法弄清楚可能是哪一个。
如果文件的编码为 UTF-8,则会发生这种情况。
如果我将其编码更改为 latin-1,则对齐是正确的,但变音符号呈现错误:
Fr?chte und Gem?se foo
Milchprodukte bar
12345678901234567890 baz
Run Code Online (Sandbox Code Playgroud) 当我在 bash 中并按Esc, Shift+ K, 时V,bash 会$EDITOR
以类似于/tmp/bash-fc-186566385
.
为什么会这样,它的目的是什么?
我可能需要提到我正在使用 .bash 运行 bash set -o vi
。
一个 bash 脚本,包含
for i in {a,b}-{1,2}; do
echo $i;
done
Run Code Online (Sandbox Code Playgroud)
印刷
a-1
a-2
b-1
b-2
Run Code Online (Sandbox Code Playgroud)
执行时。这是我所期望的 - 随着{a,b}
构造的扩展。
但是,当(另一个)脚本包含
v={a,b}-{1,2}
echo $v
Run Code Online (Sandbox Code Playgroud)
它打印
{a,b}-{1,2}
Run Code Online (Sandbox Code Playgroud)
这不是我所期望的。我预计它会打印a-1 a-2 b-1 b-2
。显然,该{a,b}
构造没有展开。
我可以让它像这样扩展
v=$(echo {a,b}-{1,2})
Run Code Online (Sandbox Code Playgroud)
基于这些观察,我有两个问题:1)何时{a,b}
扩展构造?2) 是$(echo {a,b}-{1,2})
在需要时触发扩展的首选方式吗?
我正在尝试更新 arch Linux 安装:
sudo pacman -Syu
Run Code Online (Sandbox Code Playgroud)
它持续了一段时间,然后开始写入错误消息,例如
(691/691) checking keys in keyring [##############################################################################################] 100%
(691/691) checking package integrity [##############################################################################################] 100%
error: libtiff: signature from "Levente Polyak (anthraxx) <levente@leventepolyak.net>" is unknown trust
:: File /var/cache/pacman/pkg/libtiff-4.1.0-1-x86_64.pkg.tar.xz is corrupted (invalid or corrupted package (PGP signature)).
Do you want to delete it? [Y/n]
error: krb5: signature from "Levente Polyak (anthraxx) <levente@leventepolyak.net>" is unknown trust
:: File /var/cache/pacman/pkg/krb5-1.17.1-1-x86_64.pkg.tar.zst is corrupted (invalid or corrupted package (PGP signature)).
Do you want to delete it? [Y/n]
Run Code Online (Sandbox Code Playgroud)
我尝试了两者,用 …
我想知道是否有 Windows 环境变量的 Unix 等效项PATHEXT
。
对于那些没有 Windows 背景的人:添加文件后缀以PATHEXT
允许我执行脚本而无需在 cmd.exe 中键入该后缀。例如,在我的 Windows 计算机上,PATHEXT 包含后缀.pl
,当我想在 cmd.exe 中执行 Perl 脚本时,我只需键入my-script
即可执行。然而,为了在 bash 中执行相同的脚本,我需要写全名:my-script.pl
.
由于我目前同时在 Windows 和 Unix 上工作,我几乎总是陷入再次进入 Unix 框时忘记键入后缀的陷阱。
我基本上是在尝试将 shell 命令输出的某些部分分配给多个变量,但我不知道如何做到这一点。
为简单起见,假设 shell 上的命令在执行时打印
one two three four
Run Code Online (Sandbox Code Playgroud)
可以用一个模拟
echo "one two three four"
Run Code Online (Sandbox Code Playgroud)
(虽然实际的命令是不同的)
现在,我想将输出的第二个和第四个字(在本例中为二和四)分配给变量w1和w2。
我以为我可以像这样使用read命令:
echo "one two three four" | awk '{print $2 " " $4}' | read w1 w2
Run Code Online (Sandbox Code Playgroud)
但这不起作用,可能是因为读取命令是在子进程中执行的。
那么,我将如何实现我所追求的目标?
man git-format-patch
引用了UNIX 邮箱格式,这是我不熟悉的术语。
谷歌搜索“ UNIX邮箱格式”和类似的表达式列出了许多包含术语mbox的匹配结果。
mbox甚至还有一个手册页(man mbox) 。
我得出结论,mbox和UNIX 邮箱格式是同一件事,但我不是 100% 确定。
有人可以证实(或否认)我的假设吗?
我的 bash 环境处于 vi 模式 ( set -o vi
)。所以我可以输入<ESC>/
后跟一个词,然后回车,然后 bash 在历史记录中搜索这个词。由于/
也是vi搜索正则表达式的方法,所以我在表达式下bash也会搜索正则表达式。
不幸的是,当我输入<ESC>/foo.*bar
bash 时,它在历史记录中找不到任何与正则表达式匹配的行foo.*bar
。
我是否忽略了某些东西,还是无法在历史记录中搜索正则表达式?
在我的~/.Xresources
文件中,我想包含另一个文件,其位置取决于环境变量的值。这可能吗?
#include "${env_path}/abc/def/Xresources"
Run Code Online (Sandbox Code Playgroud)
似乎没有扩大${env_path}
。
bash ×5
shell ×2
arch-linux ×1
email ×1
file-format ×1
pacman ×1
printf ×1
readline ×1
standard ×1
unicode ×1
vi ×1
x-resources ×1