bash - 来自自定义函数的 echo 调用的 bash shell 问题
问题描述
我正在学习 bash 语言的过程中(v.painful),我正在与下面的代码作斗争。对其当前行为的任何解释将不胜感激。
代码
#!/usr/bin/env bash
function useless
{
echo "$1"
return 0
}
function call-and-report
{
TEST_CRITERIA="$1"
if $TEST_CRITERIA
then
echo "passed"
else
echo "failed"
fi
}
call-and-report $(useless "Hello World")
问题
我期待以下控制台输出:
Hello World
passed
相反,我看到以下输出:
./../test.sh: line 13: Hello: command not found
failed
解决方案
$(command)
执行command
然后将其标准输出替换为命令行。因此,无论useless
终端上没有打印什么打印,它都会被替换回调用命令行。
所以你的最后一个命令变成:
call-and-report Hello World
然后在里面call-and-report
,$1
是Hello
, 你把它分配给TEST_CRITERIA
. 当你这样做
if $TEST_CRITERIA
相当于
if Hello
这试图Hello
作为命令执行。由于没有这样的命令,你会得到一个错误。
如果你想测试是否有任何东西$TEST_CRITERIA
,你需要使用test
命令,也可以作为[
.
if [ -n "$TEST_CRITERIA" ]
请注意,由于您没有引用$(useless "Hello World")
它输出的每个单词,因此它成为call-and-report
.
如果你想在$TEST_CRITERIA
终端上打印的值,你需要在call-and-report
.
function useless
{
echo "$1"
return 0
}
function call-and-report
{
TEST_CRITERIA="$1"
echo "$TEST_CRITERIA"
if [ -n "$TEST_CRITERIA" ]
then
echo "passed"
else
echo "failed"
fi
}
call-and-report "$(useless "Hello World")"
推荐阅读
- sharepoint - 如何通过 Microsoft 图形 API 在共享点附加文件?
- python - Keras Valueerror:这个模型从未被调用过
- swift - 使用 Quickblox SDK 2.17 将视频作为附件发送
- php - Combination of escapeshellcmd and escapeshellarg
- javascript - 基于 API 分页对象显示数据表分页
- android - Exoplayer 2 Android 不玩 HLS
- environment-variables - Gatsby 如何使用环境变量?
- java - Spring Boot 不为 ZonedDateTime 使用自定义反序列化器
- python - 如何运行这个 Luigi 任务-TaskClassNotFoundException(cls._missing_task_msg(name))
- java - 弹性搜索和 Java - 需要获取该特定索引可用的索引及其对应类型