小编Mik*_*keD的帖子

为什么大多数 Linux 程序都是用 C 编写的?

为什么大多数 Linux 程序都是用 C 编写的?为什么它们不是用更新的 C++ 编写的?

linux c c++

33
推荐指数
2
解决办法
3万
查看次数

echo [9876543210] 显示 1 4 5 6 ... 为什么?

请解释为什么最后四个echo语句显示1 4 5 6?我偶然碰到了一次,但我现在很好奇为什么会发生这种行为。

这些语句按预期工作(对我而言)。

$ echo [ 9876543210 ]  
[ 9876543210 ]

$ echo [237890]  
[237890]
Run Code Online (Sandbox Code Playgroud)

这些 echo 语句始终显示 1 4 5 6。这些数字有什么特别之处吗?

$ echo [9876543210]  
1 4 5 6

$ echo [abcd9876543210ghi]  
1 4 5 6

$ echo [-123456-]  
1 4 5 6

$ echo [-7654321-]  
1 4 5 6
Run Code Online (Sandbox Code Playgroud)

谢谢!

  • 可能的重复项是相关且有帮助的,但不是重复项。可能的重复是从rm命令的角度来看的。这个问题是从echo命令的感知“奇怪行为”的角度来看的。两者的基本答案都是通配。搜索echo命令问题的人不会轻易找到rm问题,但更可能会在这里登陆。

shell bash echo wildcards patterns

21
推荐指数
1
解决办法
2332
查看次数

从匹配目录中查找一层深的目录列表

我正在尝试获取包含在特定文件夹中的目录列表。

鉴于这些示例文件夹:

foo/bar/test
foo/bar/test/css
foo/bar/wp-content/plugins/XYZ
foo/bar/wp-content/plugins/XYZ/js
foo/bar/wp-content/plugins/XYZ/css
baz/wp-content/plugins/ABC
baz/wp-content/plugins/ABC/inc
baz/wp-content/plugins/ABC/inc/lib
baz/wp-content/plugins/DEF
bat/bar/foo/blog/wp-content/plugins/GHI
Run Code Online (Sandbox Code Playgroud)

我想要一个将返回的命令:

XYZ
ABC
DEF
GHI
Run Code Online (Sandbox Code Playgroud)

本质上,我正在寻找 wp-content/plugins/ 中的文件夹

Usingfind使我最接近,但我不能使用-maxdepth,因为该文件夹离我正在搜索的位置很远。

运行以下命令以递归方式返回所有子目录。

find -type d -path *wp-content/plugins/*

foo/bar/wp-content/plugins/XYZ
foo/bar/wp-content/plugins/XYZ/js
foo/bar/wp-content/plugins/XYZ/css
baz/wp-content/plugins/ABC
baz/wp-content/plugins/ABC/inc
baz/wp-content/plugins/ABC/inc/lib
baz/wp-content/plugins/DEF
bat/bar/foo/blog/wp-content/plugins/GHI
Run Code Online (Sandbox Code Playgroud)

ls bash directory find

15
推荐指数
2
解决办法
1万
查看次数

间接返回数组中的所有元素

Bash 手册页描述了使用${!a}返回名称为a(间接级别)内容的变量的内容。

我想知道如何使用这个返回数组中的所有元素,即,

a=(one two three)
echo ${a[*]}
Run Code Online (Sandbox Code Playgroud)

返回

one two three
Run Code Online (Sandbox Code Playgroud)

我想要:

b=a
echo ${!b[*]}
Run Code Online (Sandbox Code Playgroud)

返回相同。不幸的是,它没有,而是返回0

更新

鉴于回复,我现在意识到我的例子太简单了,因为当然,像:

b=("${a[@]}")
Run Code Online (Sandbox Code Playgroud)

将完全实现我所说的我需要的。

所以,这就是我想要做的:

LIST_lys=(lys1 lys2)
LIST_diaspar=(diaspar1 diaspar2)

whichone=$1   # 'lys' or 'diaspar'

_LIST=LIST_$whichone
LIST=${!_LIST[*]}
Run Code Online (Sandbox Code Playgroud)

当然,仔细阅读 Bash 手册页表明这不会按预期工作,因为最后一行只是返回“数组”的索引$_LIST(根本不是数组)。

在任何情况下,以下应该做的工作(如所指出的):

LIST=($(eval echo \${$_LIST[*]}))
Run Code Online (Sandbox Code Playgroud)

或者......(我最终走的路线):

LIST_lys="lys1 lys2"
...
LIST=(${!_LIST})
Run Code Online (Sandbox Code Playgroud)

当然,假设元素不包含空格。

bash array

10
推荐指数
2
解决办法
5346
查看次数

是否可以使用 grep 只提取完整的单词?

当我使用 grep 命令时,会拾取所有出现的单词,即使它们是其他单词的一部分。例如,如果我使用 grep 来查找单词 'the' 的出现,它也会突出显示 'theatre' 中的 'the'

有没有办法调整 grep 命令,使其只提取完整的单词,而不是单词的一部分?

linux grep

10
推荐指数
3
解决办法
6973
查看次数

如何仅解析 2017-03-08T19:41:26Z 的日期?

我试图从2017-03-08T19:41:26Z.

所需的输出是 2017-03-08。

command-line bash string date

10
推荐指数
5
解决办法
1万
查看次数

rsync:比较目录与符号链接

这里有各种类似的问题,但我认为没有一个能很好地回答这个问题。

我有一个本地目录 ( www),它必须在远程服务器上完全镜像,我需要确认它们是精确的副本。

www包含指向内部其他文件的符号链接www(链接指向常规文件和目录)。此命令将比较两个版本的www,不包括本地 svn 目录作为奖励,并仅打印不同的文件:

[local]$ rsync -rvnc --exclude=.svn/ --delete www/ remote:/var/www/
Run Code Online (Sandbox Code Playgroud)

它不遵循符号链接,只是报告它们不是常规文件。所以,我需要取消引用符号链接,并比较它们的目标。这rsync -rvncLrsync -rvncK没有 --L打印出许多没有区别的文件(无论如何我都可以看到),并且-K什么都不做。有任何想法吗?

rsync symlink

9
推荐指数
1
解决办法
501
查看次数

Bash:使用 tee 的 for 循环中的变量范围

考虑:

numbers="1 111 5 23 56 211 63"
max=0

for num in ${numbers[@]}; do

      [ $num -gt $max ]\
           && echo "old -> new max = $max -> $num"\
           && max=$num

done | tee logfile

echo "Max= $max"
Run Code Online (Sandbox Code Playgroud)

如果我删除| tee logfilemax 变量正确打印为 211,但如果我将它留在我得到Max= 0.

到底是怎么回事?

shell bash pipe tee variable

6
推荐指数
2
解决办法
4474
查看次数

根据中间部分对文件进行排序

我在unix中有以下文件,我想根据文件名中的日期和时间对文件进行排序

ABC_XYZ。20170201223147 .txt
ABC_XYZ。20170201223146 .txt
ABC_XYZ。20170127223141 .txt
ABC_XYZ。20170125223139 .txt
ABC_XYZ。20170214223134 .txt

我期待以下作为输出

ABC_XYZ。20170125223139 .txt
ABC_XYZ。20170127223141 .txt
ABC_XYZ。20170201223146 .txt
ABC_XYZ。20170201223147 .txt
ABC_XYZ。20170214223134 .txt

我尝试使用sort -kand sort -n,也许我没有以正确的方式使用它们。

shell-script filenames sort

6
推荐指数
1
解决办法
539
查看次数

我可以增加系统管道缓冲区最大值吗?

我想制作一个缓冲区约为 5MB 的 FIFO 管道。我知道 linux 中默认的 FIFO 管道缓冲区最大值约为 1MB。我看到它位于 /proc/sys/fs/pipe-max-size

我尝试将其设置如下:

sudo sysctl fs.pipe-max-size=4194304
Run Code Online (Sandbox Code Playgroud)

然后我看到值确实被改变了:

$ cat  /proc/sys/fs/pipe-max-size
4194304
Run Code Online (Sandbox Code Playgroud)

然后我创建了一个新的 FIFO 管道,但我没有注意到性能有任何改进。它似乎以与之前的 1MB FIFO 管道相同的速度填充。所以我不确定我的新 FIFO 管道实际上有一个 4MB 的缓冲区。

我如何 1) 增加系统 FIFO 管道缓冲区最大值和 2) 创建一个使用此缓冲区最大值的 FIFO 管道?

linux memory pipe buffer fifo

5
推荐指数
2
解决办法
2万
查看次数

标签 统计

bash ×5

linux ×3

pipe ×2

shell ×2

array ×1

buffer ×1

c ×1

c++ ×1

command-line ×1

date ×1

directory ×1

echo ×1

fifo ×1

filenames ×1

find ×1

grep ×1

ls ×1

memory ×1

patterns ×1

rsync ×1

shell-script ×1

sort ×1

string ×1

symlink ×1

tee ×1

variable ×1

wildcards ×1