我有一个问题,我的脚本参数来自于此:
Map<String, List<String>> tempMap = new HashMap<>();
batches(item, 25).forEach(i -> {
tempMap.putAll(delivery.process(i));
});
对此(我使用'_rofiarg: -mesg "State: Active:Enabled"'
btw剥离_rofiarg:
):
cut
正如你所看到的,我有目的的双引号被忽略了,Bash将它们分成两个单词。
我会在这里重写一个伪代码,因为原始脚本对我的配置有很多本地依赖。
-mesg '"State:' 'Active:Enabled"'
在此之后我将#script1.sh
# $active and $state have some value, of course
script2.sh \
"_rofiarg: -mesg \"State: $active:$state\"" \
${somearray[@]};
#script2.sh
#Check input for rofi arguments, add them to Args(), all else goes to Data()
for Arg in "$@"; do
if [[ "$Arg" =~ _rofiarg:* ]]; then
Args+=( "$(echo "$Arg" | cut -c 11-)" );
else
Data+=( "$Arg" );
fi;
done;
传递给目标程序,在本例中为Rofi - 就像这样:
${Args[@]}
我已经遇到这个问题好几个小时了。我所有的关于实际传递到哪个程序的陈述是使用out="$(
printf '%s\n' "${Data[@]}" |
rofi -config $CONF/rofi/config.cfg \
-dmenu -no-custom \
-padding $padd \
${Args[@]};
)";
记录的,而我在某一点,我认为我真的尝试了所有随机组合的单,双,set -o xtrace
和所有其他报价类型。
答案 0 :(得分:0)
行
${Args[@]};
具有未引号的变量扩展是"State:
和…"
之间的连贯性丢失的地方。为了防止这种情况,我们必须用引号引起来,但是为了删除引号并将-mesg
与"State: …"
分开,我们必须eval
使用命令;这给出了:
out="$(
printf '%s\n' "${Data[@]}" |
eval rofi -config $CONF/rofi/config.cfg \
-dmenu -no-custom \
-padding $padd \
"${Args[@]}"
)"