我正在嘗試使用 for 回圈列印存盤在串列中的一些單詞:
#!/bin/sh
list="bla1 bla2 * bla3"
for i in $list
do
echo "$i"
done
我想要這個輸出:
bla1
bla2
*
bla3
運行腳本給出:
bla1
bla2
[LIST OF FILES]
bla3
我希望存盤在串列中的單詞被視為字串,請幫助!
我試過:
echo "\$i"
echo ""$i""
echo "'$i'"
...
這沒用
uj5u.com熱心網友回復:
當您需要存盤任意字串串列時,最佳做法是使用支持陣列的 shell,而不是/bin/sh:
#!/usr/bin/env bash
list=( bla1 bla2 "*" bla3 )
for i in "${list[@]}"; do
echo "$i"
done
...或使用一個規范可用的陣列,即引數串列:
#!/bin/sh
set -- bla1 bla2 "*" bla3
for i in "$@"; do
echo "$i"
done
除此之外,您可以使用 關閉 glob 擴展set -f,稍后(如果需要)使用 將其重新打開set f:
#!/bin/sh
set -f # prevent * from being replaced with a list of filenames
list='bla1 bla2 * bla3'
for i in $list; do
echo "$i"
done
uj5u.com熱心網友回復:
在 for 回圈中將 $list 放在雙引號中。這會停止在不使用雙引號時發生的 shell 擴展,并使您的串列只是您期望的字串串列。
請注意,這并不是說沒有更好的 shell 和方法可以使用,只是展示了另一種需要注意的方法:-)
$ cat x.sh
#!/bin/sh
list="bla1 bla2 * bla3"
for i in "$list"
do
echo "$i"
done
$ ./x.sh
bla1 bla2 * bla3
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/533769.html
標籤:壳嘘特殊字符
上一篇:反應側面板轉換沒有發生
