下面的代码最好地描述了这种情况。为什么最后一行不输出尾随换行符?每行的输出都显示在注释中。我使用的是GNU bash,版本 4.1.5
echo -n $'a\nb\n' | xxd -p # 610a620a
x=$'a\nb\n' ; echo -n "$x" | xxd -p # 610a620a
echo -ne "a\nb\n" | xxd -p # 610a620a
x="$(echo -ne "a\nb\n")" ; echo -n "$x" | xxd -p # 610a62
Run Code Online (Sandbox Code Playgroud) 我意识到这!在命令行历史上下文中对命令行具有特殊意义,但除此之外,在运行脚本中,感叹号有时会导致解析错误。
我认为它与 an 有关event,但我不知道事件是什么或它做什么。即便如此,相同的命令在不同情况下的行为也会有所不同。
下面的最后一个示例导致错误;但是为什么,当相同的代码在命令替换之外工作时呢?.. 使用 GNU bash 4.1.5
# This works, with or without a space between ! and p
{ echo -e "foo\nbar" | sed -nre '/foo/! p'
echo -e "foo\nbar" | sed -nre '/foo/!p'; }
# bar
# bar
# This works, works when there is a space between ! and p
var="$(echo -e "foo\nbar" | sed -nre '/foo/! p')"; echo "$var"
# bar
# This causes an ERROR, with NO …Run Code Online (Sandbox Code Playgroud) 我可能有一些绝对错误的地方,但对我来说看起来很有说服力,将 IFS 设置为pre-do/done 列表中的命令之一绝对没有效果。
外部 IFS(while构造外部)在下面脚本中显示的所有示例中都占优势。
这里发生了什么?我对 IFS 在这种情况下的作用有什么误解吗?我希望数组拆分结果如“预期”列中所示。
#!/bin/bash
xifs() { echo -n "$(echo -n "$IFS" | xxd -p)"; } # allow for null $IFS
show() { x=($1)
echo -ne " (${#x[@]})\t |"
for ((j=0;j<${#x[@]};j++)); do
echo -n "${x[j]}|"
done
echo -ne "\t"
xifs "$IFS"; echo
}
data="a b c"
echo -e "----- -- -- \t --------\tactual"
echo -e "outside \t IFS \tinside"
echo -e "loop \t Field \tloop"
echo -e "IFS NR NF \t …Run Code Online (Sandbox Code Playgroud) -L是 的一个有用功能wc,或者我认为。它打印最长行的长度。出于某种原因,它将单字节 tab-char 扩展到 8 的长度。
有什么方法可以将其设置为不“扩展”选项卡?这种扩张背后的原因可能是什么?
echo -n $'\t' | wc -L
Run Code Online (Sandbox Code Playgroud)
产出 8
wc (GNU coreutils) 7.4
GNU bash,版本 4.1.5
我安装了 2x2 GiB 内存条。从 grub 启动菜单
运行memtest86确认了这一点.. memtest86 没有报告错误。
然而,我在运行的 Ubuntu 10.04 系统中检查可用内存的每一种方式,它只报告大约 3.2 GiB。
cat /proc/meminfo == 3320132 KBSystem Monitor == 3.2 GiB htop == 3242 MBfree -m == 3242 MB谁有我丢失的内存?
更新信息:我刚刚在同一硬件上双启动到另一个版本的 Ubuntu 10.04(我忘记了几个月前我已经安装了它,以防万一):)....它报告 3.9 GiB,通过System Monitor...
我已/var/log/messages在http://pastebin.ubuntu.com/629246/ 上发布了我的最新信息
我要查看(和/或编辑)在Emacs着色的文字,如输出的ls -l --color=always,tree...或者别的什么东西。
我引用的文本存在于文件中。当我在 emacs 中打开该文件时,我希望能够看到它被着色,或者切换它以显示 ANSI (SGR) 转义序列。
ansi-color.el 似乎是我需要的,但我无法让它对 ANSi 转义序列进行任何着色,但我确实看到单个控制字节(例如^A和^[)的蓝粗体......我不是确定这是否是 的一个特征ansi-color,但我认为是。
根据ansi-color.el 注释,它可以处理字符串和区域,但即使这样似乎也不起作用.. 例如,该函数ansi-color-apply-on-region不被M-x. 它说,“不匹配”
我已经添加(require 'ansi-color)到我的.emacs文件中,甚至(add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on). emacs 启动时我没有收到错误或警告,所以我被卡住了。
如何让标准功能工作,以及在打开名称后缀为 的文件时是否可以自动应用.col?
使用具有非空白空间值的 IFS 解析数组会创建空元素。
即使使用tr -s将多个 delim 缩小为单个 delim 也是不够的。
一个例子可以更清楚地解释这个问题..
有没有办法通过调整 IFS 来实现“正常”结果(是否有相关的设置来改变 IFS 的行为?.... 即与默认空格相同国际金融服务公司。
var=" abc def ghi "
echo "============== IFS=<default>"
arr=($var)
for x in ${!arr[*]} ; do
echo "# arr[$x] \"${arr[x]}\""
done
#
sfi="$IFS" ; IFS=':'
set -f # Disable file name generation (globbing)
# (This data won't "glob", but unless globbing
# is actually needed, turn if off, because
# unusual/unexpected combinations of data can glob!
# and they can do it in …Run Code Online (Sandbox Code Playgroud) 失礼:我在下面提到的“快速”方法并不比慢速方法快 60 倍。它快了 30 倍。我会把错误归咎于这个小时(凌晨 3 点不是我一天中清晰思考的最佳时间:)。
更新:我添加了测试时间摘要(如下)。
速度因素似乎涉及两个问题:
所有的测试都是用 100 万个文件完成的。
(真实时间、用户时间和系统时间在测试脚本中)
测试脚本可以在paste.ubuntu.com找到
#
# 1 million files
# ===============
#
# |time |new dir |Files added in ASCENDING order
# +---- +------- +-------------------------------------------------
# real 01m 33s Add files only (ASCENDING order) ...just for ref.
# real 02m 04s Add files, and make 'rm' source (ASCENDING order)
# Add files, and make 'rm' source (DESCENDING order)
# real 00m 01s Count of filenames
# …Run Code Online (Sandbox Code Playgroud) 两三年前,我(在 Windows 中)使用 NTFS ADS 元数据(备用数据流)进行了试验。这似乎是一个有趣的想法,但它肯定不是“可移植的”。
是否有可以读取和/或写入此 ADS 数据的 NTFS-ADS 感知工具?
此外,是否有任何`nix 常用/首选文件系统支持类似的辅助流”?
我注意到一个 O'Reillyawk示例(1997),它通过在程序文本之后的命令行上设置它来分配一个 awk 变量。它确实有效,但我在man / info awk 中找不到这种语法。我刚刚错过了吗?它被贬低了吗……?我在手册中看到的唯一语法是-v选项。
awk '/home/{print foo, bar}' foo="cat" bar="dog" /proc/$$/cmdline
Run Code Online (Sandbox Code Playgroud)
输出: cat dog