假设我在 bash 中有以下别名 - alias ls='ls --color=auto'- 我想在ls没有选项的情况下调用普通。这样做的唯一方法是取消别名,执行命令然后再次别名吗?或者有一些漂亮的技巧或解决方法?
我可以写
VAR=$VAR1
VAR=${VAR1}
VAR="$VAR1"
VAR="${VAR1}"
Run Code Online (Sandbox Code Playgroud)
最终结果对我来说似乎都差不多。我为什么要写一个或另一个?这些中的任何一个都不是便携式/ POSIX 吗?
我想我了解交互式、登录和批处理 shell 之间的区别。请参阅以下链接以获取更多帮助:
我的问题是,如果我在交互式、登录或批处理 shell 上,如何使用命令/条件进行测试?
我正在寻找一个命令或条件(返回true或false),我也可以放在 if 语句中。例如:
if [[ condition ]]
echo "This is a login shell"
fi
Run Code Online (Sandbox Code Playgroud) 我有一个充满图像的目录:
image0001.png
image0002.png
image0003.png
...
Run Code Online (Sandbox Code Playgroud)
我想要一个单线将它们重命名为(比如说)。
0001.png
0002.png
0003.png
...
Run Code Online (Sandbox Code Playgroud)
我该怎么做呢?
大多数语言都有变量的命名约定,我在 shell 脚本中看到的最常见的样式是MY_VARIABLE=foo. 这是惯例还是仅适用于全局变量?脚本本地的变量呢?
我可以同时将输出重定向到日志文件和后台进程吗?
换句话说,我可以做这样的事情吗?
nohup java -jar myProgram.jar 2>&1 > output.log &
Run Code Online (Sandbox Code Playgroud)
或者,这不是合法的命令吗?或者,我是否需要手动将其移动到后台,如下所示:
java -jar myProgram.jar 2>$1 > output.log
jobs
[CTRL-Z]
bg 1
Run Code Online (Sandbox Code Playgroud) 我试图了解逻辑运算符优先级在 bash 中是如何工作的。例如,我会期望以下命令不会回显任何内容。
true || echo aaa && echo bbb
Run Code Online (Sandbox Code Playgroud)
然而,出乎我的意料,bbb被打印出来了。
有人可以解释一下,我如何理解bash 中的复合&&和||运算符?
在我的 Bash 环境中,我使用包含空格的变量,并在命令替换中使用这些变量。
引用我的变量的正确方法是什么?如果这些是嵌套的,我该怎么做?
DIRNAME=$(dirname "$FILE")
Run Code Online (Sandbox Code Playgroud)
或者我在替换之外引用?
DIRNAME="$(dirname $FILE)"
Run Code Online (Sandbox Code Playgroud)
或两者?
DIRNAME="$(dirname "$FILE")"
Run Code Online (Sandbox Code Playgroud)
还是我使用反引号?
DIRNAME=`dirname "$FILE"`
Run Code Online (Sandbox Code Playgroud)
这样做的正确方法是什么?以及如何轻松检查报价是否正确?
shell ×10
bash ×6
shell-script ×3
quoting ×2
rename ×2
alias ×1
directory ×1
files ×1
filesystems ×1
monitoring ×1
posix ×1
variable ×1