由於IFS的默認值,我得到以下結果。linux shell腳本:忽略來自IFS的雙引號
STR="this is a \"valid string\""
for a in $STR; do
echo $a;
done
會給作爲輸出:
this
is
a
"valid
string"
但我不想要分割 「有效的字符串」。 我需要的輸出:
this
is
a
"valid string"
那麼,如何才能讓殼忽略來自IFS雙引號?
由於IFS的默認值,我得到以下結果。linux shell腳本:忽略來自IFS的雙引號
STR="this is a \"valid string\""
for a in $STR; do
echo $a;
done
會給作爲輸出:
this
is
a
"valid
string"
但我不想要分割 「有效的字符串」。 我需要的輸出:
this
is
a
"valid string"
那麼,如何才能讓殼忽略來自IFS雙引號?
這並不容易。您可以切換到Perl。或者,如果你有超過字符串的完全控制,沒有人能可能是有史以來插入一些邪入它,你可以使用此代碼:
str="a b c \"d e\""
eval "set args $str; shift"
for i in "[email protected]"; do
echo "$i"
done
這將輸出的最後一個字不帶引號,但。它會將命令lune參數覆蓋到shell程序本身。
如果您需要保留引號,這稱爲解析,不應該由shell程序完成,因爲它變得太複雜了。
引號有兩種類型:文字和句法。 STR
的外部引號是句法的,這意味着它們實際上並不是字符串的一部分,它們只是用來告訴Bash字符串開始和結束的位置。內部(轉義)引號是文字,因此它們是字符串的一部分。換句話說,你的字符串的字面值:
this is a "valid string"
現在如果你想遍歷這個,你要記住這串由五個(空間分隔)文字的話:
this
is
a
"valid
string"
如果要解決這個問題,一個既可以使用eval
(但嚴重security issues謹防)或數組:
declare -a STR=(this is a "valid string")
for str in "${STR[@]}"
do
echo "$str"
done
請正確格式化您的問題! – jman
對不起。我是新的stackoverflow。現在完成。 – sachinpkale