所以我是一个新的学习bash脚本,我想到了以下代码。
run_command() {
echo "+" "$@"
"$@"
}
我对“ $ @”的含义感到困惑,为什么还要两次?
非常感谢您的度过,并度过了愉快的一天。
答案 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
希望这些示例引导您逐步了解脚本的功能。