我--在compgen命令中看到使用过。
例如:
compgen -W "foo bar baz" -- b
Run Code Online (Sandbox Code Playgroud)
里面的意思是什么--?
我理解子shell的语法是(<commands...>),$()只是一个可以从中检索变量值的子shell?
注意:根据文档中的不同措辞,这适用于 bash 4.4。
我刚刚遇到了一个 bash 脚本。[[:space:]]在 bash 脚本中是什么意思?为什么是双冒号?
我正在学习决策结构,我遇到了这些代码:
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)
他们两个的行为都是一样的。使用一种方式与另一种方式有什么优势吗?
我想编写一个函数,我可以从具有许多不同变量的脚本中调用该函数。由于某些原因,我在这样做时遇到了很多麻烦。我读过的例子总是只使用一个全局变量,但就我所见,这不会使我的代码更具可读性。
预期用途示例:
#!/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等等,但在函数的本地上下文中。如您所知,函数可以在任何适当的语言中工作。
写一个长管道时,将它分成两行通常会更清楚。
这个长命令行:
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)
我意识到这可能是一个风格(意见)问题,但是:有没有更喜欢的方式,如果有,为什么?
我正在从surrey.ac.uk的UNIX 初学者教程中学习 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)
无论如何它都有效。
我今天遇到了一个 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) Homebrew 要求我们添加eval $(/opt/homebrew/bin/brew shellenv)到~/.zprofile. 这实际上评估了什么以及它实现了什么?
我对 shell 脚本有点陌生。我知道$var用于引用名为 var 的变量,但仅此而已。在里面放置路径是什么意思$()?这里还有shellenv一个论证,它意味着什么?