簡體   English   中英

我希望我的腳本從字面上回顯“ $ 1”到文件中

[英]I want my script to echo “$1” into a file literally

這是我腳本的一部分

#!/bin/bash

echo "ls /SomeFolder | grep $1 | xargs cat | grep something | grep  .txt | awk '{print $2}' | sed 's/;$//';" >> script2.sh

除了$ 1和$ 2,這一切都很好地呼應了我的腳本。 取而代之的是,它輸出這些變量的輸入,但我希望它從字面上讀取“ $ 1”和“ $ 2”。 救命?

逃脫它:

echo "ls /SomeFolder | grep \$1 | xargs cat | grep something | grep  .txt | awk '{print \$2}' | sed 's/;\$//';" >> script2.sh

引用它:

echo "ls /SomeFolder | grep "'$'"1 | xargs cat | grep something | grep  .txt | awk '{print "'$'"2}' | sed 's/;"'$'"//';" >> script2.sh

或像這樣:

echo 'ls /SomeFolder | grep $1 | xargs cat | grep something | grep  .txt | awk '\''{print $2}'\'' | sed '\''s/;$//'\'';' >> script2.sh

使用此處引用的文檔

cat << 'EOF' >> script2.sh
ls /SomeFolder | grep $1 | xargs cat | grep something | grep  .txt | awk '{print $2}' | sed 's/;$//';
EOF

基本上,您想防止擴展,即。 取字面意義上的字符串。 您可能需要閱讀bashfaq報價

首先,你永遠也不會寫這篇文章(見https://mywiki.wooledge.org/ParsingLshttp://porkmail.org/era/unix/award.html你不需要里grep + SEDS +管道,當你正在使用awk):

ls /SomeFolder | grep $1 | xargs cat | grep something | grep  .txt | awk '{print $2}' | sed 's/;$//'`

您可以這樣寫:

find /SomeFolder -mindepth 1 -maxdepth 1 -type f -name "*$1*" -exec \
    awk '/something/ && /.txt/{sub(/;$/,"",$2); print $2}' {} +

或者如果您喜歡使用print | xargs print | xargs而不是-exec

find /SomeFolder -mindepth 1 -maxdepth 1 -type f -name "*$1*" -print0 |
    xargs -0 awk '/something/ && /.txt/{sub(/;$/,"",$2); print $2}'

現在將該腳本附加到文件將是:

cat <<'EOF' >> script2.sh
find /SomeFolder -mindepth 1 -maxdepth 1 -type f -name "*$1*" -print0 |
    xargs -0 awk '/something/ && /.txt/{sub(/;$/,"",$2); print $2}'
EOF

順便說一句,如果你想要的. .txt中將其按字面意義處理,而不是被視為表示“任何字符”的正則表達式元字符,那么您應該使用\\.txt而不是.txt

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM