我正在调用一些将VARIABLE设置为某个值并返回另一个值的函数。我需要保留VARIABLE的值,并将函数的返回值分配给另一个VAR。这是我试过的:

bar() {
        VAR="$(foo)"
        echo $VARIABLE >&2
        echo $VAR >&2
}

foo() {
        VARIABLE="test"
        echo "retval"
}
bar

但它打印
retval

有没有办法做到这一点?

最佳答案

ksh为此提供了一个方便的非子命令替换构造:

#!/bin/ksh
foo() {
  echo "cat"
  variable="dog"
}
output="${ foo }"
echo "Output is $output and the variable is $variable"

bash和其他shell中,您必须通过一个临时文件来代替:
#!/bin/bash

foo() {
  echo "cat"
  variable="dog"
}

# Create a temp file and register it for autodeletion
file="$(mktemp)"
trap 'rm "$file"' EXIT

# Redirect to it and read it back
foo > "$file"
output="$(< "$file")

echo "Output is $output and the variable is $variable"

关于linux - 保留返回值并且不从子shell运行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50427597/

10-14 14:24