你如何检查是否$*为空?换句话说,如何检查命令是否没有提供参数?
假设当我执行 ls 命令时,输出是:
file1 file2 file3 file4
Run Code Online (Sandbox Code Playgroud)
是否可以只显示特定的输出列,在这种情况下是 file2?我尝试了以下方法但没有成功:
echo ls | $2
Run Code Online (Sandbox Code Playgroud)
基本上我只想回显第二列,在这种情况下,我想回显:
file2
Run Code Online (Sandbox Code Playgroud) 我有一个命令的“选项”数组。
my_array=(option1 option2 option3)
Run Code Online (Sandbox Code Playgroud)
我想在 bash 脚本中调用此命令,使用数组中的值作为选项。于是,command $(some magic here with my_array) "$1"变成:
command -option1 -option2 -option3 "$1"
Run Code Online (Sandbox Code Playgroud)
我该怎么做?是否可以?
我认为这很简单 - 但事实证明它比我预期的要复杂。
我想遍历目录中特定类型的所有文件,所以我这样写:
#!/bin/bash
for fname in *.zip ; do
echo current file is ${fname}
done
Run Code Online (Sandbox Code Playgroud)
只要目录中至少有一个匹配的文件,这就会起作用。但是,如果没有匹配的文件,我会得到:
current file is *.zip
Run Code Online (Sandbox Code Playgroud)
然后我尝试:
#!/bin/bash
FILES=`ls *.zip`
for fname in "${FILES}" ; do
echo current file is ${fname}
done
Run Code Online (Sandbox Code Playgroud)
当没有文件时循环体不执行,我从 ls 收到错误:
ls: *.zip: No such file or directory
Run Code Online (Sandbox Code Playgroud)
如何编写一个干净地处理没有匹配文件的循环?
如何$@在不首先将所有位置参数复制到这样的另一个数组的情况下在 Bash 中获取切片?
argv=( "$@" )
echo "${argv[@]:2}";
Run Code Online (Sandbox Code Playgroud) 在使用set -e( errexit), set -u( nounset) 以及 ERR 和 EXIT 陷阱时,我观察到一些奇怪的行为。它们似乎相关,因此将它们放在一个问题中似乎是合理的。
set -u不触发 ERR 陷阱代码:
#!/bin/bash
trap 'echo "ERR (rc: $?)"' ERR
set -u
echo ${UNSET_VAR}
Run Code Online (Sandbox Code Playgroud)set -e不会改变结果set -eu在 EXIT 陷阱中使用退出代码是 0 而不是 1代码:
#!/bin/bash
trap 'echo "EXIT (rc: $?)"' EXIT
set -eu
echo ${UNSET_VAR}
Run Code Online (Sandbox Code Playgroud)set …我在一个很棒的 shell 脚本的末尾看到了这一点,但我无法理解这里的登录信息,因为我认为它缺少更长的命令。
spark ${@:-`cat`}
Run Code Online (Sandbox Code Playgroud)
这出现在这个脚本的末尾。有任何想法吗?
+ 标记为将其扩展为完整代码段的人,即使速度较慢(更好的解释)
在命令行中,我经常使用“简单”命令,例如
mv foo/bar baz/bar
Run Code Online (Sandbox Code Playgroud)
但我不知道如何称呼这一切:
?1? ???2????
git checkout master
? ???????3???????
????????4??????????
Run Code Online (Sandbox Code Playgroud)
我(认为我)知道1是命令,2是参数,我可能会称3为参数列表(对吗?)。
但是,我不知道该怎么称呼4。
如何标记更复杂的“命令”?
find transcripts/?.? -name '*.txt' | parallel -- sh -c 'echo $1 $2' {} {/}
Run Code Online (Sandbox Code Playgroud)
我很感激一个答案,它分解了调用 1,2,3,4 的内容以及调用上面的“命令”的每个部分的内容。
了解其他我没有包括在这里的独特/令人惊讶的事情会很棒。
parameter ×10
bash ×8
shell ×4
array ×2
shell-script ×2
alias ×1
arguments ×1
command ×1
command-line ×1
ls ×1
scripting ×1
terminology ×1
trap ×1
wildcards ×1