标签: syntax

“--”(双破折号)是什么意思?

--compgen命令中看到使用过。

例如:

compgen -W "foo bar baz" -- b
Run Code Online (Sandbox Code Playgroud)

里面的意思是什么--

command-line shell utilities syntax

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

$() 是子shell吗?

我理解子shell的语法是(<commands...>)$()只是一个可以从中检索变量值的子shell?

注意:根据文档中的不同措辞,这适用于 bash 4.4。

bash subshell syntax

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

~/Mary 是相对路径吗?

让我们假设Mary是一个目录。下面的路径是~/Mary相对的吗?

directory syntax

36
推荐指数
3
解决办法
1万
查看次数

[[:space:]] 在 bash 中是什么意思?

我刚刚遇到了一个 bash 脚本。[[:space:]]在 bash 脚本中是什么意思?为什么是双冒号?

bash syntax

30
推荐指数
3
解决办法
1万
查看次数

if else 语句是否等价于逻辑和 &amp;&amp; 或 || 我应该在哪里比另一个更喜欢?

我正在学习决策结构,我遇到了这些代码:

if [ -f ./myfile ]
then
     cat ./myfile
else
     cat /home/user/myfile
fi


[ -f ./myfile ] &&
cat ./myfile ||
cat /home/user/myfile
Run Code Online (Sandbox Code Playgroud)

他们两个的行为都是一样的。使用一种方式与另一种方式有什么优势吗?

shell-script control-flow syntax

28
推荐指数
3
解决办法
3892
查看次数

如何在bash脚本中将参数传递给函数?

我想编写一个函数,我可以从具有许多不同变量的脚本中调用该函数。由于某些原因,我在这样做时遇到了很多麻烦。我读过的例子总是只使用一个全局变量,但就我所见,这不会使我的代码更具可读性。

预期用途示例:

#!/bin/bash
#myscript.sh
var1=$1
var2=$2
var3=$3
var4=$4

add(){
result=$para1 + $para2
}

add $var1 $var2
add $var3 $var4
# end of the script

./myscript.sh 1 2 3 4
Run Code Online (Sandbox Code Playgroud)

我尝试$1在函数中使用等,但是它只需要调用整个脚本的全局函数。基本上我正在寻找的是类似的东西$1$2等等,但在函数的本地上下文中。如您所知,函数可以在任何适当的语言中工作。

bash parameter function syntax

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

两行长管道的首选语法

写一个长管道时,将它分成两行通常会更清楚。

这个长命令行:

ruby -run -e httpd -- -p 5000 . 2>&1 | tee >(grep -Fq 'WEBrick::HTTPServer#start' && open localhost:5000) 
Run Code Online (Sandbox Code Playgroud)

可以分为:

ruby -run -e httpd -- -p 5000 . 2>&1 \
   | tee >(grep -Fq 'WEBrick::HTTPServer#start' && open localhost:5000) 
Run Code Online (Sandbox Code Playgroud)

或者:

ruby -run -e httpd -- -p 5000 . 2>&1 |
    tee >(grep -Fq 'WEBrick::HTTPServer#start' && open localhost:5000) 
Run Code Online (Sandbox Code Playgroud)

简而言之:

command1 \
    | command2
Run Code Online (Sandbox Code Playgroud)

或者:

command1 |
    command2
Run Code Online (Sandbox Code Playgroud)

我意识到这可能是一个风格(意见)问题,但是:有没有更喜欢的方式,如果有,为什么?

shell bash ksh syntax

20
推荐指数
4
解决办法
2188
查看次数

使用 mv 命令将文件从一个文件夹移动到另一个文件夹 - 奇怪的例子

我正在从surrey.ac.ukUNIX 初学者教程中学习 unix 命令,那里我发现了一种移动文件的奇怪方法。特别是,我在主目录中有文件夹 unixstuff,在 unixstuff 中有文件夹备份和文件 Caiti.txt 和 Caiti.bak。

根据上面的链接,要将 Caiti.bak 文件从 unixstuff 移动到备份,我必须确保当前目录是 unixstuff 并且我必须运行以下命令:

mv Caiti.bak backups/.
Run Code Online (Sandbox Code Playgroud)

请你解释一下这些/.字符的含义吗?点表示当前目录(在本例中为 unixstuff)。如果我运行命令:

mv Caiti.bak backups
Run Code Online (Sandbox Code Playgroud)

无论如何它都有效。

command mv syntax

20
推荐指数
1
解决办法
1804
查看次数

包含双冒号 '::' 的 Bash 脚本函数名称

我今天遇到了一个 Bash 脚本,它的函数名称中带有双冒号::,例如,file::write()file::read(). 我以前从未在 Bash 脚本中看到过这种语法,当我调用该脚本时,它运行得很好(令我惊讶)。

在我的系统(和在线)上搜索 Bash 的手册页后,我在文档中找不到任何支持函数名称语法的内容。例如,该部分Shell Defined Functions将 shell 函数的语法定义为

function name [()] compound-command [redirection]
Run Code Online (Sandbox Code Playgroud)

然后(在手册中的其他地方)令牌name被定义为

name   A word consisting only of alphanumeric characters and
       underscores, and beginning with an alphabetic character
       or an underscore.  Also referred to as an identifier.
Run Code Online (Sandbox Code Playgroud)

没有任何地方提到函数名的双冒号语法。

到目前为止,我发现的对这种双冒号语法的唯一其他引用是在这个Shell 样式指南(请参阅小节Naming Conventions > Function Names)中,它建议对“包”中的函数名称使用双冒号语法——例如,mypackage::myfunction().

函数名称的这种双冒号语法是 Bash shell 的合法特性,还是可能是未记录的特性?如果它是合法的,它在 Bash 手册中的何处记录?我看了又看,但在手册中找不到任何相关内容。我发现最接近的是::PATH环境变量中使用将当前工作目录添加到搜索路径。

例子

function name …
Run Code Online (Sandbox Code Playgroud)

bash syntax

17
推荐指数
1
解决办法
3839
查看次数

命令 eval "$(/opt/homebrew/bin/brew shellenv)" 实际上是做什么的?

Homebrew 要求我们添加eval $(/opt/homebrew/bin/brew shellenv)~/.zprofile. 这实际上评估了什么以及它实现了什么?

我对 shell 脚本有点陌生。我知道$var用于引用名为 var 的变量,但仅此而已。在里面放置路径是什么意思$()?这里还有shellenv一个论证,它意味着什么?

shell homebrew syntax macos

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