bashmapfile在处理 NUL 分隔输入时似乎被破坏了。特别是,它无法-正确处理减号字符 ( ),将 1 后的空字符串视为行尾标记。
例如:
#!/bin/bash
mkdir /tmp/junk
cd /tmp/junk
touch a.txt b.txt c.txt d-e-f.txt
declare -a files
echo "mapfile using default \\n delimiter"
mapfile -t files < <(find . -maxdepth 1 -type f -name '*.txt')
typeset -p files
echo
echo "mapfile using NUL delimiter"
mapfile -d'' -t files < <(find . -maxdepth 1 -type f -name '*.txt' -print0)
typeset -p files
echo
echo "and again"
mapfile -d$'\0' -t files < <(find . …Run Code Online (Sandbox Code Playgroud) 我最近发现不能将空字符串传递给 Bash 数组。这很棘手,因为我试图将空字符串值插入到数组中。
然而,我注意到 Bash 完成变量 COMP_WORDS 可以包含空值。
我编写了一个虚拟完成脚本来说明这一点,并启用了调试选项:
1 #!/bin/bash
2 _comp() {
3 set -xv
4 for i in ${!COMP_WORDS[@]}; do
5 echo "<${COMP_WORDS[$i]}>"
6 done
7 set +xv
8 local cur=${COMP_WORDS[$COMP_CWORD]}
9
10 local arr=(apple banana mango pineapple)
11 COMPREPLY=()
12 COMPREPLY=($(compgen -W "${arr[*]}" -- $cur))
13
14 }
15
16 complete -F _comp dummy
Run Code Online (Sandbox Code Playgroud)
如果我获取该文件,然后输入以下内容:
dummy apple banana
Run Code Online (Sandbox Code Playgroud)
然后,如果我将光标移回苹果和香蕉之间的中间空间(下面用下划线表示)...
dummy apple _ banana
Run Code Online (Sandbox Code Playgroud)
然后,如果我点击选项卡,我会从生成的调试中得到以下输出,显示四个数组元素,“虚拟”“苹果”“香蕉”
for i in '${!COMP_WORDS[@]}'
+ echo '<dummy>'
<dummy>
+ for …Run Code Online (Sandbox Code Playgroud) 有没有办法&>/dev/null在 sh/bash 脚本中设置默认行为?我宁愿不必将此附加到控制台中的每个命令,而不是 *.sh 脚本。
我正在寻找一个全局设置......或者至少是某种自定义别名,但是可以使任何命令和每个命令自动附加&>/dev/null到末尾。
有任何想法吗?
我刚刚遇到的建议是,如果您想删除一个大文件并且一个进程打开了文件句柄,您应该将它复制到 /dev/null 并且它的大小将减少到零。
这是如何运作的?或者这甚至有效?
快速搜索后,我发现了相互矛盾的答案,从“是的,这完全有效”到“你的整个机器要爆炸了”。有人可以启发我吗?
我在这里找到了这个问题:https : //syedali.net/engineer-interview-questions/
echo "Some text" >> /dev/null
然后尝试cat null没有输出。有人可以解释为什么会这样吗?
我从原型硬件 RNG 中获得了一个数据文件,但是由于某种原因它产生了大量0x00字节。我想删除所有这些0x00字节,以便我可以测试其余数据是否是随机的。
我将如何在终端中执行此操作?
null ×6
bash ×3
array ×1
autocomplete ×1
cp ×1
files ×1
filesystems ×1
shell ×1
shell-script ×1
stderr ×1