在bash中,当我运行以下命令时:
sh -c "command"
Run Code Online (Sandbox Code Playgroud)
是否创建了一个子shell然后command
执行?
我的猜测是命令将在当前的shell中运行,但我不确定.这个猜测来自我已经使用以下命令测试的事实:
echo $BASHPID, $BASH_SUBSHELL
Run Code Online (Sandbox Code Playgroud)
和
sh -c "echo $BASHPID, $BASH_SUBSHELL"
Run Code Online (Sandbox Code Playgroud)
结果是一样的.但是,有人告诉我这可能有点误导,因为在执行命令之前可能会替换变量.这是真的吗?
我是shell脚本的新手,我正在尝试创建一个简单的函数,它将返回作为参数传递的连接的两个字符串.我试过下面的代码
function getConcatenatedString() {
echo "String1 $1"
echo "String2 $2"
str=$1/$2
echo "Concatenated String ${str}"
echo "${str}"
}
Run Code Online (Sandbox Code Playgroud)
//我正在调用上面的函数
constr=$(getConcatenatedString "hello" "world")
echo "printing result"
echo "${constr}"
echo "exit"
Run Code Online (Sandbox Code Playgroud)
使用上面的代码运行脚本时,我看到下面的输出,
printing result
String1 hello
String2 world
Concatenated String hello/world
hello/world
exit
Run Code Online (Sandbox Code Playgroud)
如果你看代码我首先调用函数然后我回显"打印结果"语句,但结果首先是"打印结果"并回显函数内部的语句.以下语句是否调用该函数
constr=$(getConcatenatedString "hello" "world")
Run Code Online (Sandbox Code Playgroud)
要么
echo ${constr}
Run Code Online (Sandbox Code Playgroud)
正在调用这个函数?
因为如果我注释掉#echo $ {constr}那么没有什么能得到回应!请澄清我.