Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在BASH中运行变量命令_Bash_Shell - Fatal编程技术网

在BASH中运行变量命令

在BASH中运行变量命令,bash,shell,Bash,Shell,我有一个名为script.sh的BASH脚本,它接受3个参数并运行一个可执行文件。前两个只是数字,但最后一个是给出输入文件的参数。我希望脚本以输入作为可执行文件的参数运行可执行文件,并使用“如果要存储命令,最好使用函数而不是变量。正如您所发现的,重定向在存储在变量中时不起作用(也不起作用|,;或&) command1(){ “/l${1}t${2}”“3” } 命令2(){ “/l${1}t${2}”

我有一个名为script.sh的BASH脚本,它接受3个参数并运行一个可执行文件。前两个只是数字,但最后一个是给出输入文件的参数。我希望脚本以输入作为可执行文件的参数运行可执行文件,并使用“如果要存储命令,最好使用函数而不是变量。正如您所发现的,重定向在存储在变量中时不起作用(也不起作用
|
&

command1(){
“/l${1}t${2}”“3”
}
命令2(){
“/l${1}t${2}”<“$3”
}
命令1“$@”
命令2“$@”
在这里,我定义了两个函数,它们使用数组中的参数调用
$@
“$@”
将脚本的参数转发给函数

还请注意,我在
“/${1}t${2}”和
“$3”
周围加了引号。使用双引号允许这些参数包含空格。自由引用是一种很好的防御脚本编写技术


(我强烈建议不要执行
eval“$command2”
。使用
eval
是一个非常危险的习惯。)

如果您想存储命令,最好使用函数而不是变量。正如您所发现的,当存储在变量中时重定向不起作用(也不包括
&

command1(){
“/l${1}t${2}”“3”
}
命令2(){
“/l${1}t${2}”<“$3”
}
命令1“$@”
命令2“$@”
在这里,我定义了两个函数,它们使用数组中的参数调用
$@
“$@”
将脚本的参数转发给函数

还请注意,我在
“/${1}t${2}”和
“$3”
周围加了引号。使用双引号允许这些参数包含空格。自由引用是一种很好的防御脚本编写技术


(我强烈建议不要做
eval“$command2”
。使用
eval
是一个非常危险的习惯。)

无论如何,您应该能够
eval
变量的内容。无论如何,您应该能够
eval
变量的内容。这正是我需要的!感谢您的帮助和精彩的解释!这正是我需要的!感谢您的帮助和精彩的解释!
bash script.sh 5 1 input.txt
#!/bin/bash

command1="./l${1}t${2} $3"
command2="./l${1}t${2} < $3"

echo + ${command1}
${command1}

echo + ${command2}
${command2}
./l5t1 input.txt
./l5t1 < input.txt
./l5t1 '<' input.txt
command1() {
    "./l${1}t${2}" "$3"
}

command2() {
    "./l${1}t${2}" < "$3"
}

command1 "$@"
command2 "$@"