标签: parameter

如何检查是否没有为命令提供参数?

你如何检查是否$*为空?换句话说,如何检查命令是否没有提供参数?

shell bash parameter shell-script

117
推荐指数
2
解决办法
17万
查看次数

如何将参数传递给别名?

对于 bash 脚本,我可以"$@"用来访问参数。使用别名时的等价物是什么?

shell parameter alias

101
推荐指数
5
解决办法
11万
查看次数

如何只回显 ls 命令的 1 列输出?

假设当我执行 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)

ls bash parameter arguments

82
推荐指数
4
解决办法
18万
查看次数

将数组转换为命令的参数?

我有一个命令的“选项”数组。

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)

我该怎么做?是否可以?

bash array parameter

60
推荐指数
1
解决办法
3万
查看次数

bash 迭代文件列表,除非为空

我认为这很简单 - 但事实证明它比我预期的要复杂。

我想遍历目录中特定类型的所有文件,所以我这样写:

#!/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 parameter

54
推荐指数
1
解决办法
3万
查看次数

${0##*/} 和 ${0%/*} 如何工作?

我对在 shell 脚本中找到的以下正则表达式感到非常困惑:

${0##*/}
${0%/*}
Run Code Online (Sandbox Code Playgroud)

它们是如何工作的?

shell bash parameter wildcards

44
推荐指数
1
解决办法
2万
查看次数

Bash:位置参数切片

如何$@在不首先将所有位置参数复制到这样的另一个数组的情况下在 Bash 中获取切片?

argv=( "$@" )
echo "${argv[@]:2}";
Run Code Online (Sandbox Code Playgroud)

bash array parameter

32
推荐指数
2
解决办法
2万
查看次数

使用 `set -eu` 时 EXIT 和 ERR 陷阱的正确行为

在使用set -e( errexit), set -u( nounset) 以及 ERR 和 EXIT 陷阱时,我观察到一些奇怪的行为。它们似乎相关,因此将它们放在一个问题中似乎是合理的。

1)set -u不触发 ERR 陷阱

  • 代码:

    #!/bin/bash
    trap 'echo "ERR (rc: $?)"' ERR
    set -u
    echo ${UNSET_VAR}
    
    Run Code Online (Sandbox Code Playgroud)
  • 预期:ERR 陷阱被调用,RC != 0
  • 实际:没有调用ERR 陷阱,RC == 1
  • 注意:set -e不会改变结果

2)set -eu在 EXIT 陷阱中使用退出代码是 0 而不是 1

  • 代码:

    #!/bin/bash
    trap 'echo "EXIT (rc: $?)"' EXIT
    set -eu
    echo ${UNSET_VAR}
    
    Run Code Online (Sandbox Code Playgroud)
  • 预期:退出陷阱被调用,RC == 1
  • 实际:调用退出陷阱,RC == 0
  • 注意:当使用 时set …

scripting bash parameter shell-script trap

31
推荐指数
2
解决办法
2万
查看次数

`:-` 在 shell 脚本中是什么意思

我在一个很棒的 shell 脚本的末尾看到了这一点,但我无法理解这里的登录信息,因为我认为它缺少更长的命令。

spark ${@:-`cat`}
Run Code Online (Sandbox Code Playgroud)

这出现在这个脚本的末尾。有任何想法吗?

+ 标记为将其扩展为完整代码段的人,即使速度较慢(更好的解释)

shell bash parameter

28
推荐指数
2
解决办法
1万
查看次数

命令行术语:命令的这些部分叫什么?

在命令行中,我经常使用“简单”命令,例如

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 的内容以及调用上面的“命令”的每个部分的内容。

了解其他我没有包括在这里的独特/令人惊讶的事情会很棒。

command-line parameter terminology command

23
推荐指数
2
解决办法
4044
查看次数