我使用以下代码,这是我用来更新我的 WordPress 网站的脚本的一部分:
#!/bin/bash
drt="/var/www/html"
for dir in ${drt}/*/; do
if pushd "$dir"; then
wp plugin update --all --allow-root
wp core update --allow-root
wp language core update --allow-root
wp theme update --all --allow-root
popd
fi
done
Run Code Online (Sandbox Code Playgroud)
我学到的具体的pushd-popd当我搜索一种方式来更新我的所有WordPress的情况下一气呵成在此代码中使用的模式。
我不清楚为什么这段代码包含一个if-fi段。
我可以以某种方式更改语法,以便我拥有基本相同的模式但没有if-fi段吗?
例如,而不是这样:
if pushd "$dir";
popd
commands
fi
Run Code Online (Sandbox Code Playgroud)
我会有这样的伪代码:
pushd "$dir";
commands
popd
Run Code Online (Sandbox Code Playgroud)
我可以想象我们如何在没有if-fi语句(伪代码)的情况下告诉计算机这样的事情:
for dir in ${drt}/*; do pushd "$drt"; then
commands
popd
Run Code Online (Sandbox Code Playgroud)
您可能希望在答案中包含不同的方法(即根本没有pushd- …
我曾经在 O'Reilly 的一本 Bash 书中读到以下内容(我的总结):
cd () {
echo "Improved CD !"
# Improvement one;
command cd
# Improvement two;
# Do cool stuff...
}
cd
Run Code Online (Sandbox Code Playgroud)
command当包含内置函数的函数与内置函数同名时,该命令很有用 - 它可以防止函数中内置函数的递归循环;
我的问题是,如果我们只调用一次函数,为什么首先会出现递归循环?
我用来date \+%F\-%T以这种格式显示日期和时间:2019-08-15-21:34:58.
来自man date:
%F完整日期;与 %Y-%m-%d
%T时间相同;与 %H:%M:%S 相同
我承认没有解释\+或\-。
后来我明白反斜杠是转义的,加号是参数前缀,连字符只是一个类似字符串的分隔(日期-时间),
而且,有些人使用更简单的+'%F-%T'或+"%F-%T"代替。
是否有理由在日期参数中使用 + 或 - ?
我读到在 Bash 中双引号所有变量扩展是最佳实践。我还读到不能*在双引号变量扩展后立即使用 shell glob(通配符())。当人们想要使用从变量扩展而来的正则表达式模式的值时,这些情况会发生冲突。
我有时想要将正则表达式与通配符结合使用的原因是为了让我的正则表达式在我的个人品味中保持最小、更整洁。
我将 phpmyadmin 下载到我的文档根目录并解压缩它,但我无法mv通过我放入变量的正则表达式模式重命名它,并且在扩展其变量时可用。这是确切的跟踪:
userName@compName:/var/www/html# ll
total 11336
drwxr-xr-x 3 root root 4096 Feb 14 07:04 ./
drwxr-xr-x 3 root root 4096 Feb 14 06:56 ../
-rw-r--r-- 1 root root 612 Feb 14 06:57 index.nginx-debian.html
drwxr-xr-x 12 root root 4096 Dec 23 08:50 phpMyAdmin-4.7.7-all-languages/
-rw-r--r-- 1 root root 11589684 Dec 23 14:08 phpMyAdmin-latest-all-languages.zip
userName@compName:/var/www/html# echo $pma
[pP][hH][pP][mM][yY][aA][dD][mM][iI][nN]
userName@compName:/var/www/html# mv "$pma"*/ phpmyadmin/
mv: cannot stat '[pP][hH][pP][mM][yY][aA][dD][mM][iI][nN]*/': No such file or directory …Run Code Online (Sandbox Code Playgroud) 我在研究Gentoo的ebuilds是如何制作的,我发现了以下代码:
_VIM_PLUGIN_ALLOWED_DIRS=(
after autoload colors compiler doc ftdetect ftplugin indent keymap
macros plugin spell syntax
)
local d
for d in "${_VIM_PLUGIN_ALLOWED_DIRS[@]}" "${@}"; do
[[ -d "${d}" ]] || continue
doins -r "${d}"
done
Run Code Online (Sandbox Code Playgroud)
据我所知,_VIM_PLUGIN_ALLOWED_DIRS这是一个清单。d是一个局部变量。
我不明白的是[@]in _VIM_PLUGIN_ALLOWED_DIRS[@]。通常我会省略[@], 并只d迭代_VIM_PLUGIN_ALLOWED_DIRS的值。
它在做什么?它的目的是什么?
我没见过[@],也不知道${@}之后会做什么
PS:doins是其他地方定义的外部函数
提前致谢
我知道在 GNU/Linux 中,文件权限也称为文件模式,并且术语掩码至少可以表示以下不同的含义:
umask。可以通过执行带有适当参数的命令来使用内置的umask shell umask:
通过这样做,我们为当前的shell 进程树设置了一个掩码;
要么针对当前 shell 进程树中的所有用户,要么仅针对我们自己的用户;
然而,一般来说,任何此类更改都将继承到新进程,可能是另一个 shell)。
我知道数学逻辑包括连接AKA anding ( ?)的操作,它是内置umask shell的基础。因此:
一组操作数的 and 为真,当且仅当,其所有操作数为真
我进一步了解到,有一个基于该逻辑的同名按位运算。Anding 与数字相加 ( x + y ? z) 或字符串串联 ( …
syntax ×6
bash ×3
shell-script ×2
cd-command ×1
command ×1
control-flow ×1
cron ×1
filenames ×1
mv ×1
pushd ×1
shell ×1
terminology ×1
umask ×1
wildcards ×1