2016-10-22 127 views
2

今天我看到在苹果的命令:什么是!!:2在Mac或Linux中的含义?

touch !!:2/{f1.txt, f2.txt} 

我知道使用touch命令,但什么呢!!:2确实在该命令。我没有Mac并在Linux中尝试它给出了一些奇怪的输出。如果任何人都可以解释这样的表达,那就太好了。

+0

你问标题中的表达与身体中的不同。如果你想问两者,那么两者都应该在体内。 – jww

+0

@jww这是一个错字,但现在我可以看到两者都有一些特殊含义 –

+1

[括号扩展](https://www.gnu.org/software/bash/manual/html_node/Brace-Expansion.html)你有'{f1.txt,f2.txt}'不会因逗号后面的空格而扩大。这是命令的写法吗?这可能是一个错误。 – dawg

回答

3

touch更新文件的时间戳(到当前的时间,如果没有参数)

!!是“历史扩展”操作,以这种形式(二感叹号点)从bash的历史日志检索以前的命令,为“别名! - 1'

:2是单词说明符,检索第二个命令参数。例如。如果以前的历史命令是ls -l /tmp,!!:2将渲染为'/ tmp'

{f1.txt,f2.txt}称为'Brace expansion'。 Brace扩展需要单个字符串,没有未转义的空格(这肯定是问题中的拼写错误)。例如,foo{bar,baz}将扩大到 'foobar的foobaz'

所以,让我们假设我们运行bash命令现在

ls -l /tmp 

touch !!:2/{f1.txt,f2.txt}会产生

touch /tmp/f1.txt /tmp/f2.txt 
+0

请注意,大括号扩展需要以大括号开头和结尾的单个单词。原始问题中的空格可防止大括号扩展。 – chepner

+0

@chepner感谢您的留言,错过了删除此空白 – agg3l

0

https://tiswww.case.edu/php/chet/bash/bashref.html

!!指的是前一个命令。这是'!-1'的同义词。

:2引用第二个参数。

因此,例如:

echo "content" > foo 
cp foo bar 
cat !!:2 

显示栏的内容。 !!:2是前一个命令的第二个参数。 你的榜样中有哪一个?

相关问题