I loop to get data from array in shell ,
It works when I execute it in a shell file, with this content:
arr=(1 2 3 4 5)
for var in ${arr[@]};
do
echo $var
done
Run Code Online (Sandbox Code Playgroud)
But there isn't any output when I use sh -c like below:
sh -c "arr=(1 2 3 4 5);for var in ${arr[@]};do echo $var;done"
Run Code Online (Sandbox Code Playgroud)
Your problem is using sh -c "...", see @Gilles's answer for more details.
Further more, sh (refer to POSIX sh) does not support array (strictly speaking, it has only one array, $@), you need to call other shells on your system, which support array like bash, zsh or ksh.
bash -c 'arr=(1 2 3 4 5);for var in "${arr[@]}";do echo "$var"; done'
Run Code Online (Sandbox Code Playgroud)
另请注意,在${arr[@]}取消引用时您有一个错误,实际上您需要for var in "${arr[@]}"改为。调用不带引号的变量调用 split+glob 并且是许多安全隐患的来源。
要使用 POSIX sh,您可以使用$@:
set -- 1 2 3 4 5
for var do
printf '%s\n' "$var"
done
Run Code Online (Sandbox Code Playgroud)