Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.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
Linux 如果变量不是空的,则Bash执行代码_Linux_Bash_Shell - Fatal编程技术网

Linux 如果变量不是空的,则Bash执行代码

Linux 如果变量不是空的,则Bash执行代码,linux,bash,shell,Linux,Bash,Shell,我希望你周末过得很愉快 我试图创建一个脚本,仅当变量不为空时才执行for,如果变量为空,则只执行一次命令,如下所示: #!/bin/bash X=$1 function execute { if [ ! -z $X ] then $* fi } execute for count in 1 2 3 4 execute do execute echo $count echo $(hostname) execute done 引号是你的朋友 您需要引用您的变量,并且还应该使用Bash测

我希望你周末过得很愉快

我试图创建一个脚本,仅当变量不为空时才执行for,如果变量为空,则只执行一次命令,如下所示:

#!/bin/bash
X=$1
function execute
{
if [ ! -z $X ]
then
  $*
fi
}
execute for count in 1 2 3 4
execute do
  execute echo $count
  echo $(hostname)
execute done
引号是你的朋友 您需要引用您的变量,并且还应该使用Bash测试构造,除非可移植性是一个问题。您的代码可能还有其他问题,但这种重构应该可以解决您特别询问的问题

#!/bin/bash

x="$1"

execute () {
    if [[ -n "$x" ]]; then
      "$@"
    fi
}

for count in {1..4}; do
  execute echo "$count"
  echo $(hostname)
done
根据主机名,这将输出类似以下内容:


如果变量不为空,我想在“for”中执行不同的命令,因此如果变量已填充,我想启用“for”lines@JonathanVianaBash没有lambdas,因此您通过尝试传递循环来对抗该语言。你也不能像你期望的那样让语言关键词有条件。您可以将字符串传递给eval,但如果您不信任或验证用户输入,则这是不安全的。通常,测试您的条件,然后调用所有相关的命令。我正在寻找一个选项来执行以下操作,例如,如果变量x不是空的,则执行包含单词“execute”的行来运行命令,次数与所需的“for”相同,否则只需执行命令,并使用execute忽略这些行,我需要这样的东西,因为我会运行很多句子,也许我可以复制粘贴所有句子/bin/bash x=“$1”execute(){if[-n“$x”]];然后“$@”fi}执行{1..4}中的计数;执行回显“$count”命令\u语句\u toe\u执行done@JonathanViana我明白了,但您试图使每个关键字都有条件,而bash并不是这样工作的。您可以在有效的bash中实现条件分支,但使每一行具有条件将需要您对其求值,或者编写自己的解析例程。这可能是某种X/Y问题。为什么要执行您正在执行的任何操作?请首先在粘贴您的脚本,并尝试实现此处提出的建议。根据其他注释,您实际上是在尝试将每个命令或关键字设置为有条件的。这可能是某种X/Y问题。为什么你想这样做,为什么你觉得这是完成任务的最佳方式?
1
localhost.local
2
localhost.local
3
localhost.local
4
localhost.local