Bash - 将变量分配给 yad 值 - for 循环中的 sed 用法
Bash - assign variables to yad values - sed usage in for loop
在下面的代码中,我试图将变量分配给两个 yad 值半径和数量。
这可以通过 awk 将 yad 值打印到文件来完成,但我想尽可能避免这种情况。
根据需要使用 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/^........//')
编辑:根据@Ed Morton
更改了答案
#!/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'))
if [ $? -eq 0 ]; then
radius="${values[0]}"
amount="${values[1]}"
fi
exit
bash -x 输出
+ '[' 0 -eq 0 ']'
+ radius=7.000000
+ amount=1.000000
+ exit
这比你想象的要容易:
$ values=( $(echo '7.000000 0.100000 ') )
$ echo "${values[0]}"
7.000000
$ echo "${values[1]}"
0.100000
将 $(echo '7.000000 0.100000 ')
替换为 yad ...
因此脚本将是:
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') )
if [ $? -eq 0 ]; then
echo "Radius = ${values[0]}"
echo "Amount = ${values[1]}"
fi
在下面的代码中,我试图将变量分配给两个 yad 值半径和数量。
这可以通过 awk 将 yad 值打印到文件来完成,但我想尽可能避免这种情况。
根据需要使用 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/^........//')
编辑:根据@Ed Morton
更改了答案#!/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'))
if [ $? -eq 0 ]; then
radius="${values[0]}"
amount="${values[1]}"
fi
exit
bash -x 输出
+ '[' 0 -eq 0 ']'
+ radius=7.000000
+ amount=1.000000
+ exit
这比你想象的要容易:
$ values=( $(echo '7.000000 0.100000 ') )
$ echo "${values[0]}"
7.000000
$ echo "${values[1]}"
0.100000
将 $(echo '7.000000 0.100000 ')
替换为 yad ...
因此脚本将是:
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') )
if [ $? -eq 0 ]; then
echo "Radius = ${values[0]}"
echo "Amount = ${values[1]}"
fi