我无法制作一个 bash 脚本来检查命令行中的输入数字是否为 2 的幂
输入
# ./pow2script.sh xyzdf 4 8 12 -2 USAD
Run Code Online (Sandbox Code Playgroud)
期望的输出:期望的输出应该在单独的行上
4
8
Run Code Online (Sandbox Code Playgroud)
因为只有 4 是 2^2 而 8 是 2^3
pow2script.sh 的内容
#!/bin/bash
function is_power_of_two () {
declare -i n=$1
(( n > 0 && (n & (n - 1)) == 0 ))
}
for number; do
if is_power_of_two "$number"; then
printf "%d\n" "$number"
fi
done
Run Code Online (Sandbox Code Playgroud) 通过向 .bashrc 文件中添加一个函数,我发现了一种很酷的方法来提升 1 个以上的目录级别。
只需打开 .bashrc 文件并插入函数即可完成:
#user defined functions
function cd_up() {
cd $(printf "%0.s../" $(seq 1 $1 ));
}
alias 'cd..'='cd_up'
Run Code Online (Sandbox Code Playgroud)
我想了解如何阅读它。
它是用什么语言编写的?
我有一个从其中一个网站获得的脚本。当我运行它时,它给出了“Hello”作为输出,但我无法理解脚本的工作原理。
谁能解释一下脚本实际上在做什么?
#!/bin/bash
echo hello
if test -t 1; then
# Stdout is a terminal.
exec >log
else
# Stdout is not a terminal.
npipe=/tmp/$$.tmp
trap "rm -f $npipe" EXIT
mknod $npipe p
tee <$npipe log &
exec 1>&-
exec 1>$npipe
fi
echo goodbye
Run Code Online (Sandbox Code Playgroud) 为什么下面的例子来自Arrow 的回复输出$var而不是3?
我单引号或反斜杠$var为'$var'or \$var,希望
$var将逐字传递到可执行程序的执行环境中/bin/echo,并且/bin/echo,var=3当发生参数扩展时应用环境变量$var。为什么在可执行程序的执行环境中不会发生参数扩展/bin/echo?笔记:
在原shell中,$var是单引号或反斜杠,所以在原shell的执行环境中不应该展开。
原来的shell去掉了周围的单引号或者反斜杠$var,然后把$var环境变量var=3传入到执行环境中运行/bin/echo,所以我认为参数扩展$var 应该发生在运行的执行环境中/bin/echo。
请注意,我使用set -x打印出跟踪信息,但无法弄清楚扩展后但执行前的实际结果。
谢谢。
tim$ unset var
$ set -x
tim$ var=3 /bin/echo '$var'
+ var=3
+ /bin/echo '$var'
$var
tim$ var=3 /bin/echo \$var
+ var=3
+ /bin/echo '$var'
$var
$ …Run Code Online (Sandbox Code Playgroud) 我知道在 GNU/Linux 中,文件权限也称为文件模式,并且术语掩码至少可以表示以下不同的含义:
umask。可以通过执行带有适当参数的命令来使用内置的umask shell umask:
通过这样做,我们为当前的shell 进程树设置了一个掩码;
要么针对当前 shell 进程树中的所有用户,要么仅针对我们自己的用户;
然而,一般来说,任何此类更改都将继承到新进程,可能是另一个 shell)。
我知道数学逻辑包括连接AKA anding ( ?)的操作,它是内置umask shell的基础。因此:
一组操作数的 and 为真,当且仅当,其所有操作数为真
我进一步了解到,有一个基于该逻辑的同名按位运算。Anding 与数字相加 ( x + y ? z) 或字符串串联 ( …
bash ×6
shell-script ×2
cd-command ×1
rm ×1
scripting ×1
shell ×1
syntax ×1
terminology ×1
umask ×1