unix 中 sh 和 sh -c 的区别
Difference between sh and sh -c in unix
考虑一下我有如下所示的脚本。
demo.sh:
name=
age=
echo $name
echo $age
当我执行脚本时
sh demo.sh ARUN 24
输出为:
ARUN
24
但是,当我像这样执行脚本时
sh -c demo.sh ARUN 24
输出什么都没有。
我知道如果我使用 sh -c
参数将从 [=15=]
开始分配。但是只有文件名被分配给 [=15=]
。
使用 sh -c
时如何分配多个参数?
请解释一下它是如何工作的。
改为使用此语法:
sh -c "demo.sh ARUN 24"
在您的情况下,这两个参数传递给 sh
命令,而不是 demo.sh
脚本。将它们放在引号中以将它们传递给 sh
到脚本。
请注意,最简单的方法是使脚本可执行并向其添加 hashbang (#!
) 行。脚本将如下所示:
#!/bin/sh
name=
age=
echo $name
echo $age
使其可执行:
chmod +x demo.sh
然后运行如下(没有解释器sh
,解释器现在从#!
行收集):
./demo.sh ARUN 24
考虑一下我有如下所示的脚本。
demo.sh:
name=
age=
echo $name
echo $age
当我执行脚本时
sh demo.sh ARUN 24
输出为:
ARUN
24
但是,当我像这样执行脚本时
sh -c demo.sh ARUN 24
输出什么都没有。
我知道如果我使用 sh -c
参数将从 [=15=]
开始分配。但是只有文件名被分配给 [=15=]
。
使用 sh -c
时如何分配多个参数?
请解释一下它是如何工作的。
改为使用此语法:
sh -c "demo.sh ARUN 24"
在您的情况下,这两个参数传递给 sh
命令,而不是 demo.sh
脚本。将它们放在引号中以将它们传递给 sh
到脚本。
请注意,最简单的方法是使脚本可执行并向其添加 hashbang (#!
) 行。脚本将如下所示:
#!/bin/sh
name=
age=
echo $name
echo $age
使其可执行:
chmod +x demo.sh
然后运行如下(没有解释器sh
,解释器现在从#!
行收集):
./demo.sh ARUN 24