所以我在 bash 中有这个函数,它接收一个空字符串变量作为第一个参数,接收一个字符作为第二个参数,
function check_cases {
case $2 in
r) $1=$(echo "$1 Read");;
w) $1=$(echo "$1 Write");;
x) $1=$(echo "$1 Execution");;
esac
}
我尝试过各种不同的方法来连接字符串变量,但它总是说
=: command not found
关于 = 运算符。我在函数内创建并清空本地字符串变量,例如
local var=""
并用字符变量传递它
check_cases "$var" "$char"
我想了解发生了什么事以及如何解决这个问题。
答案1
看起来你正在尝试做一个通过引用传递类型函数。
这些实际上不太适合bash
脚本编写。我们可以伪造的它与eval
命令一起使用,但这有很多危险行为(可能评估嵌入字符串中的命令),因此不建议这样做。
在这例如,代码如下所示:
function check_cases {
case $2 in
r) eval $1=\"\$$1 Read\" ;;
w) eval $1=\"\$$1 Write\" ;;
x) eval $1=\"\$$1 Execution\" ;;
esac
}
check_cases var r
check_cases var w
check_cases var x
echo $var
相反,通常更好地使用按值传递语义;只需返回您想要的值并将调用者将其附加到变量即可。
例如
function check_cases {
case $1 in
r) echo " Read" ;;
w) echo " Write" ;;
x) echo " Execution" ;;
esac
}
var="$var$(check_cases r)"
var="$var$(check_cases w)"
var="$var$(check_cases x)"
echo $var
答案2
目前尚不清楚你想要实现什么,但无论如何......
首先,赋值的语法不是
$val=value
但
val=value
无论如何
1=value
不起作用,因为变量名不能以数字开头。
要将值分配给位置参数,请执行以下操作:
function check_cases {
case $2 in
r) append=' Read';;
w) append=' Write';;
x) append=' Execution';;
esac
set "$1""$append" "$2" # notice no space between "$1" and "$append"
echo "$@" # print all parameters
echo Number of parameters: $#
}