【发布时间】:2018-08-19 01:28:12
【问题描述】:
在下面的代码中,我尝试将变量分配给两个 yad 值 Radius 和 Amount。
这可以通过将 yad 值打印到文件来使用 awk 来完成,但如果可以的话,我想避免这种情况。
使用 sed 为字符串(即两个 yad 值)分配一个变量并根据需要修剪字符。然而,脚本停在这一行;
radius=$(sed 's|[amount*,]||g')
两个问题
有没有更好的方法来解决这个问题?和
为什么脚本没有完成?我一直无法弄清楚语法。
编辑:不需要循环并使用 sed 语法
#!/bin/bash
#ifs.sh
values=`yad --form --center --width=300 --title="Test" --separator=' ' \
--button=Skip:1 \
--button=Apply:0 \
--field="Radius":NUM \
'0!0..30!1!0' \
--field="Amount":NUM \
'0!0..5!0.01!2'`
radius=$(echo "$values" | sed 's|[amount*,]||g')
amount=$(echo "$values" | sed 's/.a://')
if [ $? = 1 ]; then
echo " " >/dev/null 2>&1; else
echo "Radius = $radius"
echo "Amount = $amount"
fi
exit
替代品
# with separator
# radius="${values%????????}"
# amount="${values#????????}"
# without separator
# radius=$(echo "$values" | sed s'/........$//')
# amount=$(echo "$values" | sed 's/^........//')
【问题讨论】:
-
我不知道
yad是什么或做什么,但是radius=$(sed 's|[amount*,]||g')没有指定要操作什么数据,所以它默认永远等待你通过键盘输入数据。您可以使用radius=$(echo "$i" | sed 's|[amount*,]||g')为其提供一些数据,这样它就不会等待您手动输入。我不知道你希望这个sed做什么,我猜它不会这样做。 -
谢谢。当然...... sed 需要数据才能使用。 for 循环来自另一篇文章,没有必要。在下面回答。
-
yad 是 bash 脚本的图形界面
-
顺便说一句,正则表达式
[amount,*]几乎肯定不会做你想要或相信的事情。它匹配不是(换行符或)a或m或o或u或n或t或,或*的单个字符。可能您应该用圆括号替换方括号,尽管您随后需要使用sed -r或sed -E或了解如何进一步修改特定sed版本的正则表达式方言的表达式。 -
谢谢。我现在明白了……这是一个非常有用的帖子,全面。非常感谢响应者所花费的耐心和时间。