run_command(){回声“ +”“ $ @”; “ $ @”;在bash脚本中意味着什么?

时间:2018-09-23 17:01:26

标签: bash function arguments

所以我是一个新的学习bash脚本,我想到了以下代码。

run_command() {
  echo "+" "$@"
  "$@"
}

我对“ $ @”的含义感到困惑,为什么还要两次?

非常感谢您的度过,并度过了愉快的一天。

2 个答案:

答案 0 :(得分:2)

这将打印命令及其输出。

例如

run_command() {
  echo "+" "$@"
  "$@"
}

run_command ls

#output
#+ ls
#files_list_in_current_directory

答案 1 :(得分:2)

Aagam Jain得到了答案。我将在注释部分添加一些解释。我很抱歉。

请考虑以下示例。

显示指定给脚本的参数

test.sh:

echo "$1"
echo "$2"

让我们运行此脚本并为其提供2个参数。

$> bash test.sh ls -l

结果:

ls
-l

ls表示的第一个参数$1在第一行中回显。由-l表示的第二个参数$2在第二行中回显。

打击手册-让我们看看它怎么说

  

($ @)扩展到位置参数,从一个开始

查看此内容:https://www.gnu.org/software/bash/manual/bash.html#Special-Parameters

这如何影响我们的示例?让我们更改一下test.sh。

从一个开始扩展参数

test.sh:

echo "$@"

让我们运行它。

$> bash test.sh ls -l

结果:

ls -l

$@在同一行中依次列出两个参数。如果您有5个参数,它们将一个接一个地打印。

我们再更改一下test.sh。

在回声中添加+

test.sh:

echo "+" "$@"

让我们运行它。

$> bash test.sh ls -l

结果:

+ ls -l

这意味着在打印两个参数之前出现了+

再更改一下test.sh。

执行所有提供的参数

test.sh:

echo "+" "@"
"$@"

让我们运行它。

bash test.sh ls -l

结果:

+ ls -l
total 4
-rw-r--r-- 1 eapo users  0 Sep 23 19:38 file1
-rw-r--r-- 1 eapo users 19 Sep 23 19:38 test.sh

太好了。正如评论者和Aagam所提到的,脚本打印出了要执行的操作(使用echo "+" "$@"),然后执行了命令。 “ $ @”基本上只是在做ls -lh。终端只是按原样执行它。

现在在脚本中放置一个函数。

在脚本中添加功能

test.sh:

run_command() {
    echo "+" "$@"
    "$@"
}

run_command ls -l

请注意,我们是在脚本本身中执行函数,而不是在命令行中提供

让我们运行它。

bash test.sh

结果:

+ ls -l
total 4
-rw-r--r-- 1 eapo users  0 Sep 23 19:38 file1
-rw-r--r-- 1 eapo users 58 Sep 23 19:41 test.sh

希望这些示例引导您逐步了解脚本的功能。