今天我看到在苹果的命令:什么是!!:2在Mac或Linux中的含义?
touch !!:2/{f1.txt, f2.txt}
我知道使用touch命令,但什么呢!!:2确实在该命令。我没有Mac并在Linux中尝试它给出了一些奇怪的输出。如果任何人都可以解释这样的表达,那就太好了。
今天我看到在苹果的命令:什么是!!:2在Mac或Linux中的含义?
touch !!:2/{f1.txt, f2.txt}
我知道使用touch命令,但什么呢!!:2确实在该命令。我没有Mac并在Linux中尝试它给出了一些奇怪的输出。如果任何人都可以解释这样的表达,那就太好了。
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
https://tiswww.case.edu/php/chet/bash/bashref.html
!!指的是前一个命令。这是'!-1'的同义词。
:2引用第二个参数。
因此,例如:
echo "content" > foo
cp foo bar
cat !!:2
显示栏的内容。 !!:2是前一个命令的第二个参数。 你的榜样中有哪一个?
你问标题中的表达与身体中的不同。如果你想问两者,那么两者都应该在体内。 – jww
@jww这是一个错字,但现在我可以看到两者都有一些特殊含义 –
[括号扩展](https://www.gnu.org/software/bash/manual/html_node/Brace-Expansion.html)你有'{f1.txt,f2.txt}'不会因逗号后面的空格而扩大。这是命令的写法吗?这可能是一个错误。 – dawg